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