用栈进行括号匹配
题目:输入一串带有括号的字符,然后进行括号匹配;
输出样式:先输出原字符串,然后在下一行的对应位置,标志出不匹配的括号,不匹配的左括号用$,不匹配的右括号用?表示
样例输入:) ( r t t y y ( ) ) s s s ) (
杨力输出:) ( r t t y y ( ) ) s s s ) (
? $ ?
杨力输出:) ( r t t y y ( ) ) s s s ) (
? $ ?
实现代码:
#include <iostream>
#include <stack>
using namespace std;
stack<int> S;
char str[110];
char ans[110];
int main(int argc, char *argv[])
{
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;
}
测试输出:
)(rttyy())sss)(
)(rttyy())sss)(
? ?$