该算法的原理:
判断是否出现 {【(,出现则压入栈中,如果遇到}】),则弹出上一个栈与其对比。
算法的内容:
void validstr(char*str,SqStack*&s)
{
int flag=1;
int i;
for(i=0; *(str+i)!='\0'; i++)
{
if((*(str+i) == '{' )|| (*(str+i) =='[') || (*(str+i) =='('))
{push(s, *(str+i)); }
else if((*(str+i) == '}') || (*(str+i) ==']') || (*(str+i)==')'))
{
char a;
a = pop(s);
if((a == '{' && *(str+i) == '}') || (a == '(' &&*(str+i) == ')') || (a == '[' && *(str+i) == ']'))
{
continue;
}
else flag = 0;
}
}
if(s->top != 0)
{
flag = 0;
}
if(flag == 0)
{
printf("该字符串符号不匹配\n");
}
else
printf("该字符串符号匹配\n");
}
与该算法配套的压栈和弹栈算法以及结构体定义:
typedef struct
{
ElemType data[MAXSIZE];
int top;
}SqStack;
void InitStack(SqStack *&S )
{
S=( SqStack *)malloc(sizeof(SqStack));
S->top =0;
}
void push (SqStack *&S, ElemType e)
{
if( S->top == MAXSIZE )
return ;
S->data[S->top] = e;
S->top++;
}
char pop (SqStack *&S)
{
if(S->top == 0 )
return false;
S->top--;
return S->data[S->top];
}