AI编程C++程序,假设表达式中允许包含两种括号...

题目:


假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如 ([]()) 或 [([][])] 等为正确的匹配,[(]) 或 ([  ](  ) 或 ( ( ) ) ) 均为错误的匹配。

现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配

输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 OK,不匹配就输出 Wrong 。


如输入[(])  则输出为Wrong  如输入[([][])]  则输出OK


#include <iostream>
#include <stack>
using namespace std;
bool isMatchingPair(char opening, char closing) {
    if (opening == '(' && closing == ')')
        return true;
    else if (opening == '[' && closing == ']')
        return true;
    return false;
}
bool isParenthesisMatching(string expression) {
    stack<char> s;
    for (int i = 0; i < expression.length(); i++) {
        if (expression[i] == '(' || expression[i] == '[')
            s.push(expression[i]);
        else if (expression[i] == ')' || expression[i] == ']') {
            if (s.empty() || !isMatchingPair(s.top(), expression[i]))
                return false;
            else
                s.pop();
        }
    }
    return s.empty();
}
int main() {
    string expression;
    cout << "请输入一个只包含圆括号和方括号的字符串: ";
    cin >> expression;
    
    if (isParenthesisMatching(expression))
        cout << "OK" << endl;
    else
        cout << "Wrong" << endl;
        
    return 0;
}

上述代码中,使用了一个栈数据结构来检查括号是否匹配。开始遍历输入字符串的每个字符,如果遇到一个开括号(即'('或'['),将其推入栈中。如果遇到一个闭括号(即')'或']'),检查栈顶是否是与之匹配的开括号。如果是匹配的,弹出栈顶元素,否则表示括号不匹配。

最后,检查栈是否为空。如果栈为空,则表示所有括号都匹配,输出"OK"。否则,输出"Wrong"表示括号不匹配。



qrcode