杨多多 发表于 2021-4-24 00:11:40

求求大哥们帮我看看,栈在括号匹配中的应用

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

#define MaxSize 50

typedef struct{
        char data;
        int top;
}SqStack;

bool Push (SqStack &,char);
bool Pop (SqStack &,char &);
bool bracketCheck (char str[], int length);

bool Push (SqStack &S, char e){                //入栈
        if(S.top == MaxSize - 1){
                return false;
        }
        S.data[++S.top] = e;
        return true;
}

bool Pop (SqStack &S,char &e){                //出栈
        if(S.top == -1){
                return false;
        }
        e = S.data;
        return true;
}

bool bracketCheck (char str[], int length){
        SqStack S;                //建一个顺序栈
        S.top = -1;                //初始化栈
        for (int i = 0; i < length; i++){                                        //搜索这个数组中每个元素
                if(str == '(' || str == '[' || str == '{'){                //如果发现左括号就压入栈中
                        Push (S,str);
                }
                //发现右括号
                else if(str == ')' || str == ']' || str == '}'){
                        if (S.top == -1){                        //如果栈为空则匹配失败                       
                                printf ("右括号多了\n");
                                return false;
                        }
                        char temp;                               
                        Pop (S,temp);                //弹出当前栈顶元素,和发现的右括号对比
                        if (str == ')' && temp != '(')
                                printf ("这个')'有问题\n");
                                return false;
                        if (str == ']' && temp != '[')
                                printf ("这个']'有问题\n");
                                return false;
                        if (str == '}' && temp != '{')
                                printf ("这个'}'有问题\n");
                                return false;
                }
        }
        if (S.top == -1){                //如果搜索完毕,栈为空,则匹配成功,否则匹配失败
                printf ("你输入的括号没毛病\n");
                return true;
        }
        else{
                printf ("左括号多了\n");
                return false;
        }
}

int main(){
        char str;
        printf("请输入一串括号:\n");
        scanf("%s",str);
        printf("length = %d",strlen(str));
        bracketCheck (str,strlen(str));
       
        return 0;
}

这是运行结果,数组和长度都没问题,但是到这就结束了,bracketCheck里什么都不输出
请输入一串括号:
()(){}{}}{}}{
length = 13
--------------------------------

yuxijian2020 发表于 2021-4-24 01:25:13

bool bracketCheck (char str[], int length){
      SqStack S;                //建一个顺序栈
      S.top = -1;                //初始化栈
      for (int i = 0; i < length; i++){                                        //搜索这个数组中每个元素
                if(str == '(' || str == '[' || str == '{'){                //如果发现左括号就压入栈中
                        Push (S,str);
                }
                //发现右括号
                else if(str == ')' || str == ']' || str == '}'){
                        if (S.top == -1){                        //如果栈为空则匹配失败                     
                              printf ("右括号多了\n");
                              return false;
                        }
                        char temp;                              
                        Pop (S,temp);                //弹出当前栈顶元素,和发现的右括号对比
                        if (str == ')' && temp != '(')
                              printf ("这个')'有问题\n");      //这里的大括号呢!!!!!
                              return false;                          //每次到这边就直接return出去了!!!!!把你这几个判断的大括号加上!!!!
                        if (str == ']' && temp != '[')
                              printf ("这个']'有问题\n");
                              return false;
                        if (str == '}' && temp != '{')
                              printf ("这个'}'有问题\n");
                              return false;
                }
      }
      if (S.top == -1){                //如果搜索完毕,栈为空,则匹配成功,否则匹配失败
                printf ("你输入的括号没毛病\n");
                return true;
      }
      else{
                printf ("左括号多了\n");
                return false;
      }
}

杨多多 发表于 2021-4-24 01:57:49

yuxijian2020 发表于 2021-4-24 01:25


哇感谢感谢!!是只有一行才可以不写括号是吗
页: [1]
查看完整版本: 求求大哥们帮我看看,栈在括号匹配中的应用