您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页XDOJ 753 括号匹配检测 (stack)

XDOJ 753 括号匹配检测 (stack)

来源:华拓科技网

括号匹配检测
假设表达式中只包含三种括号:圆括号、方括号和花括号。对输入的一串由括号组成的字符串,判断其匹配情况,如([{}])或({[][()]})等均为匹配,而{[]})}或{[()]或([]}均为不匹配;若括号可以成功匹配,则输出yes,否则输出no。


输入格式:
测试数据有多组,第一行包含一个整数T(1≤T≤100),表示测试字符串的数量。
对于每组测试,输入一个由圆、方、花括号符构成的字符串(长度不超过30)。
输出格式:
对于每组测试,若括号可以成功匹配,则输出yes,否则输出no。

输入样例:
4
({})
{{}}
({[]})
}{

输出样例:
yes
yes
yes
no

注意:本题易错点

1.stack() 应该在 for 循环里面定义,否则需要每次循环清空一次

2.cin >> T 之后一定要有 getchar(), 要不然第一次 getline() 的结果为空串,反映到结果会是这样

// 2024/12/29 OK
#include <iostream>
#include <stack>

using namespace std;

int main()
{
    int T;
    cin >> T;
    getchar();
    for (int i = 1; i <= T; i ++) {
        //cout << "The " << i << " loop" << endl;
        int flag = 0;
        stack<char> t;
        string s;
        getline(cin, s);
        int size = s.size();
        for (int j = 0; j < size; j ++) {
            if (s[j] == '(' || s[j] == '[' || s[j] == '{') {
                t.push(s[j]);
            } else {
                if (!t.empty()) {
                    if (!(s[j] == ')' && t.top() == '(' || s[j] == ']' && t.top() == '[' || s[j] == '}' && t.top() == '{'))
                    {
                        flag = 1;
                        break;
                    } else {
                        t.pop();
                    }
                } else {
                    flag = 1;
                    break;
                }
            }
        }
        if (!t.empty()) flag = 1;
        if (!flag) {
            cout << "yes" << endl;
        } else {
            cout << "no" << endl;
        }
    }
    return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务