这是本蒟蒻的第一篇博客如果有什么不对或者不好的地方欢迎各位大佬指正
先看题目
标题
括号匹配
类别
字符串处理
时间限制
2S
内存限制
1000Kb
问题描述
表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。
请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。
输入说明
输入为一个表达式字符串,长度不超过50。
输出说明
对输入的表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。
输入样例
样例1输入
[(d+f)*{}2]
样例2输入
[(2+3))
输出样例
样例1输出
yes
样例2输出
no
#include<stdio.h>
#include<string.h>
int main(){
char a[100];
gets(a);
//输入代码串
int i,j;
int n=strlen(a);
char b[50];
int cnt=0;
//判断是否为括号并且统计括号个数
for(i=0;i<n;i++){
if(a[i]=='['||a[i]==']'||a[i]=='('||a[i]==')'||a[i]=='{'||a[i]=='}'){
b[cnt]=a[i];
cnt++;
}
}
//判断相邻括号是否为一对并且将是一对的括号消除将后面的顶上,动态改变cnt的值
for(i=0;i<cnt-1;i++){
if((b[i]=='['&&b[i+1]==']')||(b[i]=='('&&b[i+1]==')')||(b[i]=='{'&&b[i+1]=='}')){
b[i]=0;
b[i+1]=0;
for(j=i+2;j<cnt;j++){
b[j-2]=b[j];
}
b[cnt]=0;
b[cnt-1]=0;
cnt-=2;
i=-1;//消除后从头开始遍历
}
}
if(cnt==0){
printf("yes");
}//若括号是匹配的,所有括号都会被消除完
else printf("no");
return 0;
}
第一次写题解写法难免会比较low希望各位大佬指正