#include<stdio.h> #include<stack> using namespace std; stack <int> s;//定义一个堆栈 char str[101];//保存输入字符串 char ans[101];//保存输出字符串 int main() { while(scanf("%s",str)!=EOF)//输入字符串 { int i; for(i=0;str[i]!=0;i++)//从左到右遍历字符串 { if(str[i]=='(')//若遇到( { s.push (i);///将其数组下标放入堆栈中 ans[i]=' ';//暂且对应字符串位置改为空格 } else if(str[i]==')')//若遇到) { if(s.empty()==false)//此时堆非空 { s.pop();//栈顶位置左括号与其匹配,从栈中弹出该已经匹配的( ans[i]=' ';//修改输出中该位置为空格 } else ans[i]='?';//若栈为空,则无法找到(与之匹配,修改输出位置为? } else ans[i]=' ';//若为其他字符,与括号匹配无关,修改输出为空格 } while(!s.empty())//字符串遍历完,栈中还有(无法匹配 { ans[s.top()]='$';//修改输出位置 s.pop();//弹出 } ans[i]=0;//使输出形成字符串,在最后一个字符后添加一个空字符 puts(str);//输出原字符串 puts(ans);//输出答案字符串 } return 0; }