3.4 假设表达式中允许包含3种括号:圆括号()、方括号[]、大括号{}。试编写一个算法检查表达式中括号是否配对。若能够全部配对则返回1,否则返回0。
#include<iostream>
#include<stack>
using namespace std;
stack<char> s;
int Check(string a){
for(int i=0;i<a.size();i++){
if(a[i]==')'){
if(s.size()==0) return 0;//遇到)]}但是栈为空,则报错
if(s.top()=='(') s.pop();
}
else if(a[i]==']'){
if(s.size()==0) return 0;
if(s.top()=='[') s.pop();
}
else if(a[i]=='}'){
if(s.size()==0) return 0;
if(s.top()=='{') s.pop();
}
}
if(!s.empty()) return 0;//所有输入完成时,栈不为空,则报错
else return 1;
}
int main()
{
string a; cin>>a;
for(int i=0;i<a.size();i++){//遇到([{就压栈,就看栈顶里放的和遇到的是否匹配,是,出栈,不是,报错
if(a[i]=='('||a[i]=='['||a[i]=='{')
s.push(a[i]);
}
int t=Check(a);//检查是否匹配
if(t==true) cout<<"括号匹配";
else cout<<"括号不匹配";
return 0;
}
//{[[()]]}