初冀 2023-03-19 17:31 采纳率: 61%
浏览 41
已结题

数据结构判断括号匹配是否成功


/*对一个合法的数学表达式来说,其中的各大小括号“{”,“}”,“[”,“]”,“(”和“)”应是
相互匹配的。设计算法对以字符串形式读入的表达式S,判断其中的各括号是否是匹配的。
*/
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define max 100
typedef int element;
typedef struct sStack {
    element data[max];
    int top;
}seqStack;
void initialStack(seqStack& S) {
    S.top = -1;
}
bool stackFull(seqStack& S) {//判断栈满
    if (S.top == max - 1)
        return true;
    else
        return false;
}
bool stackEmpty(seqStack& S) {//判断栈空
    if (S.top == -1)
        return true;
    else
        return false;
}
bool stackTop(seqStack& S, element& x) {//取栈顶元素
    if (stackEmpty(S))
        return false;
    else {
        x = S.data[S.top];
        return true;
    }
}

 bool pushStack(seqStack& S, element x) {//入栈
    if (stackFull(S))
        return false;
    else {
        S.top++;
        S.data[S.top] = x;
        return true;
    }
}
bool popStack(seqStack& S, element x) {
    if (stackEmpty(S))
        return false;
    else {
        x = S.data[S.top];
        S.top--;
        return true;
    }
}
bool isSame(char a, char b) {
    if (a == '(' && b == ')')
        return true;
    else if (a == '{' && b == '}')
        return true;
    else if (a == '[' && b == ']')
        return true;
    else
        return false;
}
int main() {
    seqStack  S;
    initialStack(S);
     cout << "输入算数表达式:";
    char a[100];
    gets_s(a);
    char* p = a;
    element x;
    while (*p) {
        switch (*p) {
        case'(':
        case'[':
        case'{':
            pushStack(S, *p++);
            break;
        case')':
        case']':
        case'}':
            if (stackEmpty(S)) {
                cout << "缺少左括号" << endl;
                return 0;
            }
            else {
                stackTop(S, x);
                if (isSame(*p,x))
                    popStack(S, x);
                else
                    cout << "匹配不成功";
                return 0;
             }
        default: p++;
        }
     }
    if (stackEmpty(S))
        cout << "匹配成功!";
    else
        cout << "匹配不成功";
    return 0;
 }

想问一下,这里为什么明明是匹配的但是显示不匹配

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-19 20:35
    关注
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月22日
  • 创建了问题 3月19日

悬赏问题

  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询