假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。
Input
5+{[2X5]+2}
Output
YES
Sample Input
8-[{2+7]}
Sample Output
NO
#include <iostream>
#include <stack>
using namespace std;
stack<char> a;
#include <stdio.h>
#include <string.h>
int main()
{
int i,n,p=0,q=0;
char s[1000],b;
gets(s);
n=strlen(s);
for(i=0;i<n;i++)
{
if(s[i]=='{'||s[i]=='['||s[i]=='(')
a.push(s[i]);
if(s[i]=='}')
{
if(a.empty())
{
p=1;
break;
}
b=a.top();
if(b=='{')
a.pop();
else
{
p=1;
break;
}
}
if(s[i]==']')
{
if(a.empty())
{
p=1;
break;
}
b=a.top();
if(b=='[')
a.pop();
else
{
p=1;
break;
}
}
if(s[i]==')')
{
if(a.empty())
{
p=1;
break;
}
b=a.top();
if(b=='(')
a.pop();
else
{
p=1;
break;
}
}
}
if(!a.empty())
q=1;
if(p==1||q==1)
printf("NO
");
else
printf("YES
");
return 0;
}