括弧匹配检验。
观察题目可得:先输入到字符串里在一个一个的加入进去,左括号无脑加,右括号无脑匹配,最后看匹配完没。
提示:以下代码请复制到 Div c++ 里观看最佳。
#include<bits/stdc++.h>
using namespace std;
char pipei(char a){//匹配 pipei
switch(a){
case')':return'(';break;
case']':return'[';break;
case'>':return'<';break;
case'}':return'{';break;
}
} //根据右括号匹配左括号
int right(char a){
switch(a){
case')':case']':case'}':case'>':return 1;break;
}
return 0;
} //是否为右括号
int main(){
stack<char>v;//定义一个名字叫 v 的字符型栈。
string s;//定义一个叫 s 的字符串
cin>>s;//输入 s
for(int i=0;i<s.length();i++){//下标从 0 开始
if(!right(s[i]))v.push(s[i]);//是左括号就无脑加入准备匹配
if(right(s[i])&&v.empty()){cout<<"Wrong";return 0;}//如果栈内没东西就是右括号那么就无脑错
if(right(s[i])&&(v.top()!=pipei(s[i]))){cout<<"Wrong";return 0;}//右括号匹配最近的左括号不成功就错
if(right(s[i])&&(v.top()==pipei(s[i])))v.pop();//右括号没加入且左边一个匹配到了左括号就删除左边的那个左括号
}
if(v.empty())cout<<"OK";//匹配完了就对
else cout<<"Wrong";//没有匹配完就错
return 0;
}