阿漩 2022-07-30 20:12 采纳率: 100%
浏览 31
已结题

数据结构与算法中利用栈解决关于括号匹配检验的问题

这是数据结构与算法关于栈的一个代码实操题目:

img


```c++
Status Matching() {
    SqStack S;  //设置一个栈
    InitStack(S);  //初始化栈的操作
    int flag = 1;  
    char ch;  cin >> ch;
    while (ch != '#' && flag) {  //假设表达式以“#”结束
        switch (ch) {
        case '(':
            Push(S,ch);  //入栈
            break;
        case '[':
            Push(S, ch);  //入栈
            break;
        case ')':
            if (!StackEmpty(S) && GetTop(S) == '(') {
                SElemType x1;  //typedef char SElemType;
                Pop(S, x1);  //出栈
            }
            else flag = 0;
            break;
        case ']':
            if (!StackEmpty(S) && GetTop(S) == '[') {
                SElemType x2;  //typedef char SElemType;
                Pop(S, x2);  //出栈
            }
            else flag = 0;
            break;
        }
        cin >> ch;
    }
    if (StackEmpty(S) && flag)return true;
    else return false;
}


但是如果我把第一个case和第二个case用||合并:

Status Matching() {
    SqStack S;  //设置一个栈
    InitStack(S);  //初始化栈的操作
    int flag = 1;  
    char ch;  cin >> ch;
    while (ch != '#' && flag) {  //假设表达式以“#”结束
        switch (ch) {
        case '('||']':
            Push(S,ch);  //入栈
            break;
        case ')':
            if (!StackEmpty(S) && GetTop(S) == '(') {
                SElemType x1;  //typedef char SElemType;
                Pop(S, x1);  //出栈
            }
            else flag = 0;
            break;
        case ']':
            if (!StackEmpty(S) && GetTop(S) == '[') {
                SElemType x2;  //typedef char SElemType;
                Pop(S, x2);  //出栈
            }
            else flag = 0;
            break;
        }
        cin >> ch;
    }
    if (StackEmpty(S) && flag)return true;
    else return false;
}
他就没办法达到我想要的效果,他会提前退出程序,望解答,谢谢!
  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-07-30 20:18
    关注

    case '('||']':
    哪能这么写呢???或的结果是1啊。永远进不了这个case的
    如果是因为'('和']'执行相同的代码,那么改为
    case '(':
    case ']':
    ......
    并且这里写错了吧,应该是case '['

     
    Status Matching() {
        SqStack S;  //设置一个栈
        InitStack(S);  //初始化栈的操作
        int flag = 1;  
        char ch;  cin >> ch;
        while (ch != '#' && flag) {  //假设表达式以“#”结束
            switch (ch) {
            case '(':
            case '[':
                Push(S,ch);  //入栈
                break;
            case ')':
                if (!StackEmpty(S) && GetTop(S) == '(') {
                    SElemType x1;  //typedef char SElemType;
                    Pop(S, x1);  //出栈
                }
                else flag = 0;
                break;
            case ']':
                if (!StackEmpty(S) && GetTop(S) == '[') {
                    SElemType x2;  //typedef char SElemType;
                    Pop(S, x2);  //出栈
                }
                else flag = 0;
                break;
            }
            cin >> ch;
        }
        if (StackEmpty(S) && flag)return true;
        else return false;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月7日
  • 已采纳回答 7月30日
  • 创建了问题 7月30日

悬赏问题

  • ¥50 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 数电几道习题,写出作答过程,ai一律不采用
  • ¥15 利用pthon计算薄膜结构的光导纳
  • ¥15 海康hlss视频流怎么播放
  • ¥15 Paddleocr:out of memory error on GPU
  • ¥30 51单片机C语言数码管驱动单片机为AT89C52