m0_62746615 2022-11-30 20:28 采纳率: 85%
浏览 66
已结题

C语言,这个程序该怎么写,急

括号匹配
#include
stdio.h
if else foe
eldfkl

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2022-11-30 22:52
    关注

    img

    代码如下:

    #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;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月30日
  • 已采纳回答 11月30日
  • 修改了问题 11月30日
  • 创建了问题 11月30日