ConstStar
发布于 2023-05-05 / 42 阅读 / 0 评论 / 0 点赞

算法题:表达式括号匹配1

问题描述

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意,如()或[([][])]等为正确的匹配,[(])或(或(()))均为错误的匹配。 现在的问题是,要求检验一个给定的表达式中的括弧是否正确匹配? 输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出“OK”,不匹配就输出“Wrong”。

输入格式

输入一行字符(字符个数小于255)。

输出格式

数据匹配就输出“OK”,不匹配就输出“Wrong”。

样例

输入

[(])

输出

Wrong

解决方案

思路

代码

#include <iostream>
#include <stack>

using namespace std;

int main() {

    string buf;
    cin >> buf;

    stack<char> s;
    for (int i = 0; i < buf.size(); ++i) {
        if (buf[i] == '[' || buf[i] == '(') {
            s.push(buf[i]);
        } else {
            if (s.empty()) {
                cout << "Wrong";
                return 0;
            }

            char c = s.top();
            s.pop();

            if ((c == '(' && buf[i] != ')') || (c == '[' && buf[i] != ']')) {
                cout << "Wrong";
                return 0;
            }
        }
    }

    if (!s.empty()) {
        cout << "Wrong";
        return 0;
    }

    cout << "OK";

    return 0;
}

评论