括号匹配
#include
stdio.h
if else foe
eldfkl
2条回答 默认 最新
qfl_sdu 2022-11-30 22:52关注
代码如下:
#include <stdio.h> #include <string.h> int isRight(char c) { if(c ==')' || c==']' || c =='}') return 1; else return 0; } int isLeft(char c) { if(c =='(' || c=='[' || c=='{') return 1; else return 0; } int main() { char str[1000]={0}; int i=0,j=0; int bn=0,mn=0,sn=0; //匹配的大括号、中括号、小括号的个数 int flag = 1; //是否匹配 gets(str); //读取字符串 //开始匹配 i = 0;j=0; while(flag && str[i]!='\0') { //先找到第一个右括号 while(str[i]!='\0' && isRight(str[i])==0) i++; if(str[i]=='\0') break; //从i位置向左侧匹配 j = i-1; while(j>=0) { if(str[i]==')' && str[j]=='(') { sn++; break; }else if(str[i]==']' && str[j]=='[') { mn++; break; }else if(str[i]=='}' && str[j]=='{') { bn++; break; }else { if(str[i] == ')' && (str[j]=='[' || str[j]==']' || str[j]=='{' || str[j]=='}')) { flag = 0; break; } } j--; } i++; } if(flag == 1) printf("MATCHED %d",(bn+mn+sn)); else printf("ERR %d",(bn+mn+sn)); return 0; }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报