编程语言
首页 > 编程语言> > C++左右括号匹配问题(并给出括号的位置 并且允许非括号字符插入)修改版

C++左右括号匹配问题(并给出括号的位置 并且允许非括号字符插入)修改版

作者:互联网

#include<iostream>
#include<algorithm>
#include<stack>
#include<map>
#include<string>
using namespace std;
stack<char>st;
stack<int>num;
map<int ,int>m;
int main(){
	string s;cin>>s;
	int flag=0;
	for(int i=0;s[i];i++){
	   if(st.empty()){
	   	  st.push(s[i]);
	   	  num.push(i+1);
			 i++;
	   }
		char temp=st.top();
		if(temp==')'){
			flag=1;break;
		}
	    else if(temp=='('&&s[i]==')'){
	    	int tnum=num.top();num.pop();
	    	m[tnum]=i+1;
	    	st.pop();
		}
		else if(/*temp!='('&&temp!=')'&&*/s[i]!='('&&s[i]!=')'){
         //"吃"掉既不属于'('也不属于')'这种情况
		}
		else {
			st.push(s[i]);
			num.push(i+1);
		}
	}
	if(flag==1||!st.empty())cout<<"No"<<endl;
	else{
		cout<<"Yes"<<endl;
		for(map<int,int>::iterator it=m.begin();it!=m.end();++it){
			cout<<it->first<<" "<<it->second<<endl;
		}
	}
	return 0;
}

添加非括号字符的支持
原始代码:

NULL

修改后代码最终效果:

NULL

参考:https://blog.csdn.net/zxk_hi/article/details/79007663

标签:temp,int,C++,st,括号,修改版,num,&&,include
来源: https://www.cnblogs.com/obj-a/p/C-language-left-and-right-bracket-matching.html