问题描述
keyboard_arrow_down
请写一个程序,判断给定表达式中的括号是否匹配。表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。
输入说明
keyboard_arrow_down
有多个表达式,每个表达式占一行。当输入的表达式为空字符串(长度为0)时表示输入结束。
输出说明
keyboard_arrow_down
对每个表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。
输入样例
keyboard_arrow_down
[(d+f)*{}2]
[(2+3))
()}
[4(6]7)9
输出样例
keyboard_arrow_down
yes
no
no
no
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include<iostream> #include<algorithm> #include<string> #include<cstring> using namespace std; int main() { while(true) { string s,stack; getline(cin,s); if(s=="") break; for(int i=0; i<(int)s.size(); i++) { if(s.at(i)=='{'||s.at(i)=='('||s.at(i)=='[') { stack+=s.at(i); } else if(s.at(i)=='}'||s.at(i)==')'||s.at(i)==']') { stack+=s.at(i); if(stack.size()>=2&&((stack.at(stack.size()-2)=='('&&stack.at(stack.size()-1)==')')||(stack.at(stack.size()-2)=='['&&stack.at(stack.size()-1)==']')||(stack.at(stack.size()-2)=='{'&&stack.at(stack.size()-1)=='}'))) { stack.erase(stack.end()-2,stack.end()); } } } if(stack=="") cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; } |
发表回复