栈-例题(简单)

括弧匹配检验。

观察题目可得:先输入到字符串里在一个一个的加入进去,左括号无脑加,右括号无脑匹配,最后看匹配完没。

提示:以下代码请复制到 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;
}
2 个赞