问题 B: Problem E
题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
输入
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
输出
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
样例输入 Copy
4 [(d+f)*{}] [(2+3)) ()} [4(6]7)9
样例输出 Copy
yes no no no
代码:
#include <bits/stdc++.h>
using namespace std;
stack <char> barket;
bool match(string s) {
bool flag = true;
for(int i=0; i<s.size(); i++){
switch(s[i]){
case '(' : barket.push(s[i]); break;
case '[' : barket.push(s[i]); break;
case '{' : barket.push(s[i]); break;
case ')' :
if(!barket.empty()&&barket.top()=='(')
barket.pop();
else
return false;
break;
case ']' :
if(!barket.empty()&&barket.top()=='[')
barket.pop();
else
return false;
break;
case '}' :
if(!barket.empty()&&barket.top()=='{')
barket.pop();
else
return false;
break;
default:
break;
}
}
if(barket.empty()) return true;
return false;
}
int main() {
int m;
scanf("%d",&m);
getchar();
while(m--){
string str;
getline(cin,str);
while(!barket.empty() ) barket.pop() ;
if(match(str)==true) printf("yes\n");
else printf("no\n");
}
return 0;
}