标题
括号匹配
类别
字符串处理
时间限制
2S
内存限制
1000Kb
问题描述
表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。
请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。
输入说明
输入为一个表达式字符串,长度不超过50。
输出说明
对输入的表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。
输入样例
样例1输入
[(d+f)*{}2]
样例2输入
[(2+3))
输出样例
样例1输出
yes
样例2输出
no
#include<stdio.h>
#include<string.h>
int main()
{
int sign=0,flag=0,key=0;
char c[60]={'\0'},z[40]={'\0'},h[40]={'\0'};
gets(c);
for(sign=0;sign<strlen(c);sign++)
{
if(c[sign]=='('||c[sign]==')'||c[sign]=='['||c[sign]==']'||c[sign]=='{'||c[sign]=='}')
z[flag++]=c[sign];
}
//首先把所有括号挑出来
for(sign=0;sign<strlen(z);sign++)
{
//就是遇见‘(’就专心找‘)’,找到了就把目标转到上一个括号
//比如上一个是‘[’,就把目标转到‘]’上,最后key应该为0
if(z[sign]=='(') h[key++]=')';
if(z[sign]=='[') h[key++]=']';
if(z[sign]=='{') h[key++]='}';
if(z[sign]==h[key-1]) key--;
}
if(key!=0) printf("no");
else printf("yes");
return 0;
}