Problem E
题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
输入描述
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
输出描述
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
输入
4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9
输出
yes
no
no
no
考点:栈的特性
#include<iostream>
#include<stack>
using namespace std;
stack<char> st;
int main(void){
string s;int size;
cin>>size;
while(size--){
cin>>s;
while(!st.empty()) st.pop();
bool error=false;
for(int i=0;i<s.length();i++){
if(s[i]=='('||s[i]=='['||s[i]=='{'){
st.push(s[i]);
}
else if(s[i]==')'||s[i]==']'||s[i]=='}'){
if(st.empty()){
error=true;break;
}
char top = st.top();
if(top=='('&&s[i]==')') st.pop();
else if(top=='['&&s[i]==']') st.pop();
else if(top=='{'&&s[i]=='}') st.pop();
else{
error=true;break;
}
}
else continue;
}
if(error||!st.empty()) cout<<"no"<<endl;
else cout<<"yes"<<endl;
}
return 0;
}