从键盘读入一个字符串,其中只含有() {} [ ] ,判断该字符串中的每种括号是否成对出现。
提示:可借助栈来实现,括号必须配对出现,如()[ ]{},这是匹配的括号,如([{])},这是不匹配的括号(中间无空格)。
输入描述
输入一个字符串(中间不包含空格)
输出描述
匹配输出yes,否则输出no
输入样例
(([{}]))
输出样例
yes
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
stack<int> S;
int Transform(char ch)
{
switch(ch)
{
case '{':
return 1;
case '[':
return 2;
case '(':
return 3;
case ')':
return 7;
case ']':
return 8;
case '}':
return 9;
}
}
int Judge(int m)
{
int ret = 1;
if(!S.empty())
{
if((m+S.top())!=10)
{
ret = 0;
}
S.pop();
}else{
ret = 0;
}
return ret;
}
int main()
{
char ch;
int num;
int ret = 1;
while((scanf("%c",&ch))&&ch!='\n'&&ret)
{
num = Transform(ch);
if(num <= 3){
S.push(num);
}else{
ret = Judge(num);
}
}
if(!S.empty()){
ret = 0;
}
if(ret){
cout<<"yes";
}else{
cout<<"no";
}
return 0;
}