http://noi.openjudge.cn/ch0202/2705/
需要再开一个vector记录不匹配的括号的位置
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
#include <cmath>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
//利用栈进行左右括号匹配
int main()
{
//freopen("input.txt","r",stdin);
string s;
while(cin>>s)
{
stack<char > st;
vector<int > st2;
vector<int > st3;
cout<<s<<endl;
for(int i=0;i<s.length();i++)
{
if(s[i]=='(')
{
st.push('(');
st2.push_back(i);//记录位置
}
else if(s[i]==')')
{
if(st.size()>=1)//有配对
{
st.pop();
st2.pop_back();
}
else
{
st3.push_back(i);//记录位置
}
}
}
for(int i=0;i<st2.size();i++)
{
s[st2[i]]='$';
}
for(int i=0;i<st3.size();i++)
{
s[st3[i]]='?';
}
for(int i=0;i<s.length();i++)
{
if(s[i]!='?'&&s[i]!='$') cout<<" ";
else cout<<s[i];
}
cout<<endl;
}
return 0;
}