7-2 括号配对 (20 分)
设表达式中允许包含3种括号:圆括号、方括号和大括号。即小括号、中括号和大括号。 编写一个算法来判断表达式中的括号是否正确配对,要求利用栈的结构实现。
样例
输入格式:
输入一行带圆括号、方括号和大括号的字符串。
输出格式:
若匹配,输出yes。若不匹配,输出no。
输入样例:
在这里给出一组输入。例如:
([1+2])
结尾无空行
输出样例:
yes
结尾无空行
输入样例:
在这里给出一组输入。例如:
([
结尾无空行
输出样例:
no
结尾无空行
解答
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main(){
stack<char> st;
stack<int> already_pop;
string input;
int flag=1;
getline(cin,input);
for(int i=0;i<input.size();i++){
st.push(input[i]);
}
while(!st.empty()){
if(st.top()==')'){
already_pop.push(3);
st.pop();
}
else if(st.top()==']'){
already_pop.push(4);
st.pop();
}
else if (st.top()=='}'){
already_pop.push(5);
st.pop();
}
else if (st.top()=='('){
if(!already_pop.empty()){
if(already_pop.top()+2==5){
already_pop.pop();
st.pop();
}
else{
flag=0;
break;
}
}
else{
flag=0;
break;
}
}
else if (st.top()=='['){
if(!already_pop.empty()){
if(already_pop.top()+1==5){
already_pop.pop();
st.pop();
}
else{
flag=0;
break;
}
}
else{
flag=0;
break;
}
}
else if (st.top()=='{'){
if(!already_pop.empty()){
if(already_pop.top()==5){
already_pop.pop();
st.pop();
}
else{
flag=0;
break;
}
}
else{
flag=0;
cout<<"no";
break;
}
}
else
st.pop();
}
if(flag==0){
cout<<"no";
}
else
cout<<"yes";
return 0;
}