隔壁王健喜儿 2023-10-19 17:33 采纳率: 96%
浏览 21

关于xdoj括号匹配问题

xdoj括号匹配

#include <iostream>
#include <stack>

using namespace std;

bool CheckBrackets(string expr) {
    stack<char> s;
    for (char c : expr) {
        if (c == '(' || c == '[' || c == '{') {
            s.push(c);
        } else if (c == ')' || c == ']' || c == '}') {
            if (s.empty()) {
                return false;
            }
            char top = s.top();
            s.pop();
            if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
                return false;
            }
        }
    }
    //最后,右括号匹配完,如果栈中还有左括号,就是false,栈中没了,就是true
    return s.empty(); 
}

int main() {
    int n;
    cin >> n;
    int judge[n];
    string expr;
    for (int i = 0; i < n; i++) {
        cin >> expr;
        if (CheckBrackets(expr)) {
            judge[i] = 1;
        } else {
            judge[i] = 0;
        }
    }

    for (int i = 0; i < n; i++) {
        if (judge[i])  cout << "Yes" << endl;
        else  cout << "No" << endl;
    }

    return 0;
}

偷懒用了C++里的stl,但是提交一直显示编译错误,这是什么原因啊?

img

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-10-19 17:43
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    这段代码中存在一些问题,导致编译错误。以下是修改后的代码:

    #include <iostream>
    #include <stack>
    using namespace std;
    
    bool CheckBrackets(string expr) {
        stack<char> s;
        for (char c : expr) {
            if (c == '(' || c == '[' || c == '{') {
                s.push(c);
            } else if (c == ')' || c == ']' || c == '}') {
                if (s.empty()) {
                    return false;
                }
                char top = s.top();
                s.pop();
                if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
                    return false;
                }
            }
        }
        return s.empty();
    }
    
    int main() {
        int n;
        cin >> n;
        bool judge[n];
        string expr;
        for (int i = 0; i < n; i++) {
            cin >> expr;
            if (CheckBrackets(expr)) {
                judge[i] = true;
            } else {
                judge[i] = false;
            }
        }
    
        for (int i = 0; i < n; i++) {
            if (judge[i])  cout << "Yes" << endl;
            else  cout << "No" << endl;
        }
    
        return 0;
    }
    

    主要修改了以下几点:

    1. int judge[n];改为bool judge[n];,因为我们需要存储布尔值(true或false),而不是整数(1或0)。
    2. judge[i] = 1;judge[i] = 0;分别改为judge[i] = true;judge[i] = false;,以保持一致的数据类型。

    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 创建了问题 10月19日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?