初冀 2023-04-04 15:37 采纳率: 61%
浏览 15
已结题

顺序栈判断括号是否匹配


int matchStack(seqStack& S) {
    cout << "输入表达式:";
    char a[100];
    gets_s(a);
    char* p = a;
    element x;
    char e;
    while (*p != '\0') {
        switch (*p) {
        case'(':
        case'{':
        case'[':
            pushStack(S, *p);
            p++;
            break;
        case')':
        case'}':
        case']':
            if (stackEmpty(S)) {
                cout << "缺少左括号!" << endl;
                return 0;
            }
            else {
                stackTop(S, e);//栈顶元素
                if (isSame(e, *p))
                    popStack(S, x);
                else {
                    cout << "括号不匹配";
                    return 0;
                }
            }
        default:
            p++;
        }
    }
    if (stackEmpty(S) && *p == '\0')
        cout << "匹配成功!" << endl;
    else
        cout << "匹配不成功" << endl;

}
------------------------------------

int main() {
    seqStack S;
    initialStack(S);
    element x;
    int choice = 0;
    do {
        cout << "**********顺序栈实验测试程序*********************************" << endl;
        cout << "*0-退出                                                      " << endl;
        cout << "*1-利用顺序栈实现将10进制数转换为x进制数                      " << endl;
        cout << "*2-判断其中的各括号是否是匹配的                               " << endl;
        cout << "*3-求出所有可能的出栈序列                                      " << endl;
         cout << "请输入0~3选择你要进行的操作:                                  " << endl;
        cin >> choice;
        switch (choice) {
        case 0: {
            cout << "你选择退出";
            break;
        }
        case 1: {
            switchStack(S);
            break;
        }
        case 2:
            matchStack(S);
              break;

写了一个小菜单,为啥情况2单独写的时候可以运行,写在菜单里的时候,输入2按回车直接就输出匹配成功?,也就是matchStack函数

  cout << "输入表达式:";
    char a[100];
    gets_s(a);
    char* p = a;
    element x;
    char e;
    while (*p != '\0') {
        switch (*p) {
        case'(':
        case'{':
        case'[':
            pushStack(S, *p);
            p++;
            break;
        case')':
        case'}':
        case']':
            if (stackEmpty(S)) {
                cout << "缺少左括号!" << endl;
                return 0;
            }
            else {
                stackTop(S, e);//栈顶元素
                if (isSame(e, *p))
                    popStack(S, x);
                else {
                    cout << "括号不匹配";
                    return 0;
                }
            }
        default:
            p++;
        }
    }


这一段都没运行?!

  • 写回答

2条回答 默认 最新

  • 赵4老师 2023-04-04 16:16
    关注

    cin >> choice; cin.clear();cin.sync();

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月9日
  • 创建了问题 4月4日

悬赏问题

  • ¥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方程咨询