/*
* 括号匹配
*/
#include<iostream>
#include<stack>
using namespace std;
//括号匹配问题:就近匹配原则,后进先匹配
//先进后出顺序--1.递归 2.栈
//匹配原则:遇到左括号入栈,遇到右括号匹配(出栈)
stack<int> stk;
string s;
char vis[1001];
void check(string s) {
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') {
stk.push(i);
}
else if (s[i] == ')') {
if (stk.empty()) {
vis[i] = '?';
}
else stk.pop();
}
}
while (!stk.empty()){
vis[stk.top()] = '$';
stk.pop();
}
}
int main()
{
while (cin>>s) {
memset(vis, 32, sizeof(s));
check(s);
cout << s<<endl;
for (int i = 0; i < s.size(); i++)
cout << vis[i];
cout << endl;
}
return 0;
}
09-12
5万+
10-09
3466