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;
}
添加非括号字符的支持
原始代码:
修改后代码最终效果:
参考: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