均可正常运行,代码下附有测试
代码区
//括号匹配检验-栈
#include<stdio.h>
#include<stdlib.h>
#define stacksize 100
typedef char SElemType;
typedef struct{
char elem[stacksize];
int top;
}SqStack;
enum Status{ERROR,OK};
Status InitStack (SqStack &S)
{
S.top = -1;
return OK;
}
int IsEmpty (SqStack &S)
{
if (S.top == -1)
return 1;
else
return 0;
}
Status Push (SqStack &S,SElemType e)
{
if(S.top == stacksize-1)
return ERROR;
S.top++;
S.elem[S.top] = e;
return OK;
}
Status GetTop (SqStack &S,SElemType *e)
{
if (S.top == -1) return ERROR;
else
{
*e=S.elem[S.top];
return OK;
}
}
Status Pop (SqStack &S,char *x)
{
if (S.top == -1)
return ERROR;
else {
*x=S.elem[S.top];
S.top--;
return OK;
}
}
Status BracketMatch (char *str)
{
SqStack S;
int i=0,flag1=0,flag2;
char e;
InitStack (S);
while(str[i]!='\0')
{
switch (str[i])
{
case '(':
case '[':
case '{':
Push (S,str[i]);
break;
case ')':
{
Pop(S,&e);
if(e!='(')
flag1=1;
break;
}
case ']':
{
Pop(S,&e);
if(e!='[')
flag1=1;
break;
}
case '}':
{
Pop(S,&e);
if(e!='{')
flag1=1;
break;
}
default :break;
}
if(flag1)break;
i++;
}
flag2=IsEmpty(S);
if(!flag1&&flag2 )
printf("匹配\n");
else
printf("未匹配\n");
return OK;
}
int main()
{
int n;
char a[100];
scanf("%d",&n);
while (n--)
{
scanf("%s",a);
BracketMatch (a);
}
return 0;
}