c++ :括号匹配
题目描述
假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。
输入
5+{[2X5]+2}
输出
YES
样例输入 Copy
8-[{2+7]}
样例输出 Copy
NO
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main ( )
{
char ans[10000] , bns[10000] ,cns[10000];
int n;
int i,j;
while ( ~ scanf( "%s" , ans ))
{
for( j=0,i=0 ; i < strlen(ans) ; i++ )
{
if(ans[i]=='('||ans[i]==')'||ans[i]=='['||ans[i]==']'||ans[i]=='{'||ans[i]=='}')
bns[j++]=ans[i];
}
int f=0,k=0;
for( i=0;i<j;i++)
{
switch(bns[i])
{
case '(':
case '[':
case '{':cns[k++]=bns[i];
break;
case ')':
case ']':
case '}':
if(bns[i]==')')
{
if(cns[k-1]!='(')
{
f=1;
printf("N0\n");
break;
}
else
{
cns[--k]='\0';
}
}
else if(bns[i]==']')
{
if(cns[k-1]!='[')
{
f=1;
printf("NO\n");
break;
}
else
{
cns[--k]='\0';
}
}
else if(bns[i]=='}')
{
if(cns[k-1]!='{')
{
f=1;
printf("NO\n");
break;
}
else
{
cns[--k]='\0';
}
}
}
if(f==1)
break;
}
if(f==0)
printf("YES\n");
}
return 0 ;
}