题意:http://ac.jobdu.com/problem.php?pid=1153
#include<cstdio>
#include<cstring>
#include<stack>
#define maxSize 110
using namespace std;
int main() {
char str[maxSize];
char re[maxSize];
while (scanf("%s", str) != EOF) {
stack<int> myStack;
myStack.push(-1);//栈底哨兵 -1
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] == '(') {//字符的下标入栈,出栈时再考察是否匹配
myStack.push(i);
re[i] = ' ';
}
else if (str[i] == ')') {
int x = myStack.top();
if (x == -1) {//底层 右括号肯定不匹配
re[i] = '?';
}
else if ('(' == str[x]) {//匹配
re[i] = ' ';
myStack.pop();
}
}
else {
re[i] = ' '; //普通匹配字符
}
}//for 0~len
while (myStack.top() != -1) {//处理剩余未匹配的 左括号
int x = myStack.top();
re[x] = '$';
myStack.pop();
}
re[len] = '\0'; //最后添加一个空字符,形成字符串
printf("%s\n", str);
printf("%s\n", re);
}//while
return 0;
}