博主声明:
本文由博主luoru_LR原创,请多支持与指教。
转载请在开头附加本文链接及作者信息,并标记为转载。
博主主页
题目描述
一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。`
输入
{[2X5]+2}
输出
YES
样例输入
{2+7]}
样例输出
NO
如果是括号直接入栈,如果是右括号,与栈顶元素匹配,如果能匹配成功栈顶元素出栈,直到匹配完并且栈中没有元素剩余则括号是合法的;
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000];
while(gets(a)!=NULL)
{
char b[1000];
int top=-1;
int flag=1;
for(int i=0; i<strlen(a); i++)
{
if(a[i]=='{'||a[i]=='['||a[i]=='(')
b[++top]=a[i];
else if(a[i]=='}')
{
if(top<0)
{
flag=0;
break;
}
if(b[top]=='{')
top--;
else
{
flag=0;
break;
}
}
else if(a[i]==']')
{
if(top<0)
{
flag=0;
break;
}
if(b[top]=='[')
top--;
else
{
flag=0;
break;
}
}
else if(a[i]==')')
{
if(top<0)
{
flag=0;
break;
}
if(b[top]=='(')
top--;
else
{
flag=0;
break;
}
}
}
if(top!=-1)
flag=0;
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}