http://pkuic.openjudge.cn/hw07/4/
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用”$”标注,不能匹配的右括号用”?”标注.
###题目思路
- (入栈,遇)出栈
#include <iostream> #include<stack> #include<string> using namespace std; int main() { freopen("in.txt","r",stdin); stack<int> st; string s; while(getline(cin,s)){ cout<<s<<endl; for(int i=0;i<s.length();i++){ if(s.at(i)=='('){ st.push(i); s[i]='$'; }else if(s.at(i)==')'){ if(st.empty()){ s[i]='?'; }else{ s[i]=' '; int index=st.top(); s[index]=' '; st.pop(); } }else{ s[i]=' '; } } cout<<s<<endl; while(!st.empty()){ st.pop(); } } fclose(stdin); return 0; }
文章来源: 括号匹配问题