题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
输入描述:
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
输出描述:
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
输入
4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9
输出
yes
no
no
no
代码
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
int num;
cin>>num;
string s;
while(num)
{
stack<char> st;
cin>>s;
int flag=1;
int n=s.size();
for(int i=0;i<n;i++)
{
if(s[i]=='(')
st.push(s[i]);
if(s[i]=='{')
st.push(s[i]);
if(s[i]=='[')
st.push(s[i]);
if(s[i]==')')
{
if(st.size()==0)
{
flag=0;
break;
}
else{
if(st.top()!='(')
break;
else
st.pop();
}
}
if(s[i]==']')
{
if(st.size()==0)
{
flag=0;
break;
}
else{
if(st.top()!='[')
break;
else
st.pop();
}
}
if(s[i]=='}')
{
if(st.size()==0)
{
flag=0;
break;
}
else{
if(st.top()!='{')
break;
else
st.pop();
}
}
}
if(st.size()!=0)
flag=0;
if(flag==0)
cout<<"no"<<endl;
else
cout<<"yes"<<endl;
num--;
}
}
还是应该学会
这个用法,比用数组模拟栈更省心一点点