Description 假设一个算术表达式中可以包含三种括号:圆括号“( ”和“ )”、方括号“ [ ”和“ ] ”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用(如:…[…{…}…[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的程序(已知表达式已存入数据元素为字符的顺序表中)。
Input 输入算术表达式,换行结束。
Output 若给定表达式中所含括号正确配对,则输出yes,否则输出no。
样例输入:
[5+(6-3)]-(2+3)]样例输出:
no #include <iostream> #include <stack> #include <cstdio> #include <cstring> using namespace std; int match(string str){ int i,flag=0; stack<char> s; char t; int len=str.length(); for(i=0;i<len;i++){ if(str[i]=='['||str[i]=='{'||str[i]=='('){ s.push(str[i]); } if(str[i]==']'||str[i]=='}'||str[i]==')'){ if(s.empty()) return 1; else{ if(str[i]==']'){ t=s.top(); if(t=='[') s.pop(); else return 1; } if(str[i]=='}'){ t=s.top(); if(t=='{') s.pop(); else return 1; } if(str[i]==')'){ t=s.top(); if(t=='(') s.pop(); else return 1; } } } } if(!s.empty()) return 1; if(s.empty()&&flag!=1) return 0; } int main() { string str; cin>>str; int flag=match(str); if(flag==0) cout<<"yes"<<endl; else cout<<"no"<<endl; }
