算法思想:
1、输入第一个字符,如果为右括号则输出“error”,否则压入栈。
2、依次读取后续字符,若为左括号,压入栈;右括号则弹出栈顶元素进行匹配
3、匹配成功则继续step2,失败则输出“error”
4、直到遇到“#”结束
5、如果栈循环结束后为空,表示全部匹配成功,输出“true”,否则“error”
#include <bits/stdc++.h>
#include <string>
using namespace std;
/*
you can input: ()[]{}# ,while # means end input.
eg.1
input:((([])){})#
output:true
eg.2
input:()[[[#
output:error
*/
stack<char> st;
int main()
{
char ttt;
char x;
int n=0;
cin>>ttt;
n++;
if(ttt==')'||ttt==']'||ttt=='}')
{
cout<<"error\n";
return 0;
}
else
st.push(ttt);
while(!st.empty())
{
cin>>ttt;
if(ttt=='#')
break;
if(ttt==')'||ttt==']'||ttt=='}')
{
x=st.top();
st.pop();
//cout<<x<<endl;
if((x=='('&&ttt==')')||(x=='{'&&ttt=='}')||(x=='['&&ttt==']'))
{
continue;
}
else{
cout<<"error\n";
return 0;
}
}
else if(ttt=='('||ttt=='['||ttt=='{')
{
st.push(ttt);
}
}
if(st.empty())
cout<<"true\n";
else
cout<<"error\n";
return 0;
}