#include<iostream>#include<string>#include<stack>usingnamespace std;
string st;boolisLeft(char c)//判断是否为左括号{if(c=='('||c=='{'||c=='[')returntrue;elsereturnfalse;}boolisSame(char c1,char c2)//判断括号是否是同等类型{if(c1=='('&&c2!=')')returnfalse;if(c1=='{'&&c2!='}')returnfalse;if(c1=='['&&c2!=']')returnfalse;returntrue;}boolisValid(string s){
stack<char> b;for(int i =0;i<s.length();i++){if(isLeft(s[i])) b.push(s[i]);//如果是左括号,直接入栈else{if(b.size()==0)returnfalse;//扫描到右括号,但是栈为空,说明匹配不成功char top = b.top();if(!isSame(top,s[i]))returnfalse;//如果当前栈顶元素和当前扫描的括号不是同一类型说明没有匹配成功else
b.pop();}}if(b.size()==0)returntrue;//扫描结束,栈为空说明括号匹配成功elsereturnfalse;}intmain(){
cin>>st;if(isValid(st))
cout<<"bracket is valid"<<endl;else
cout<<"bracket is not valid"<<endl;return0;}