zhuaizhai 2024-03-22 17:49 采纳率: 90.5%
浏览 8
已结题

关于#c++#的问题:输入样例1:{}输出样例1:{)是匹配的表达式输入样例2:[({}][)]输出样例2:[({}][)]不是匹配的表达式(相关搜索:字符串|空格隔开)

C++设计一个算法,判断一个可能含有花括号、中括号、和圆括号的表达式中各类括号是否匹配,若匹配,则返回1;否则返回0。其中表达式只包含三种括号,花括号0:中括号D]、圆括号0,即它仅由(、)、[、]、(、)六个字符组成。输入说明:
输入一串只包含上述括号的字符串(中间用空格隔开)。
输出说明:
输出该字符串,并判断是不是匹配的表达式。
输入样例1:{}
输出样例1:{)是匹配的表达式
输入样例2:[({}][)]
输出样例2:[({}][)]不是匹配的表达式

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-03-22 17:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    解答: 算法设计: 利用栈来实现判断括号是否匹配的算法。 遍历字符串中的每个字符: 如果当前字符为左括号(花括号、中括号或圆括号),则将其压入栈中; 如果当前字符为右括号,则从栈中弹出一个字符,判断两者是否匹配,如果不匹配,则返回0;如果匹配,则继续遍历字符串。 如果遍历完字符串后,栈为空,则返回1,表示括号匹配,否则返回0。 代码实现:
    #include <iostream>
    #include <stack>
    #include <string>
    using namespace std;
    bool isMatch(char left, char right) {
        return (left == '(' && right == ')') || (left == '[' && right == ']') || (left == '{' && right == '}');
    }
    int main() {
        string str;
        getline(cin, str);
        stack<char> s;
        for (int i = 0; i < str.length(); i++) {
            if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
                s.push(str[i]);
            } else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
                if (s.empty()) {
                    cout << str << "不是匹配的表达式" << endl;
                    return 0;
                }
                char left = s.top();
                s.pop();
                if (!isMatch(left, str[i])) {
                    cout << str << "不是匹配的表达式" << endl;
                    return 0;
                }
            }
        }
        if (s.empty()) {
            cout << str << "是匹配的表达式" << endl;
        } else {
            cout << str << "不是匹配的表达式" << endl;
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月22日