#include<cstdio> #include<cstring> //栈匹配括号 #define Max 100 typedef struct{ char data[Max]; int top; } SqStack; bool initStack(SqStack &S){ S.top = -1; return true; } bool Push(SqStack &S,char x){ if(S.top == Max-1) return false; //栈满,退出 S.data[++S.top] = x; return true; } bool Pop(SqStack &S,char &x){ if(S.top == -1) return false; //栈空 x = S.data[S.top--]; return true; } bool isEmpty(SqStack &S){ if(S.top == -1) return true; else return false; } bool Bracketcheck(char str[],int length){ //length是字符串长度 SqStack S; initStack(S); for(int i=0;i<length;i++){ if(str[i]=='('||str[i]=='['||str[i]=='{'){ Push(S,str[i]); }else{ if(isEmpty(S) == true) return false; //栈空,右括号单身 char s; //记录出栈元素 Pop(S,s); if(str[i] == ')' && s != '(') return false; if(str[i] == ']' && s != '[') return false; if(str[i] == '}' && s != '{') return false; } } if(isEmpty(S) != true) return false; else return true; } int main(){ char str[Max]; scanf("%s",str); if(Bracketcheck(str,strlen(str)) == true) printf("成功匹配!"); else printf("匹配失败!"); return 0; }