1004. Bracket Matching

来源:互联网 发布:数控车床编程入门视频教程 编辑:程序博客网 时间:2024/06/05 05:19

Description
检查输入字符串中的括号是否匹配。括号包括:{, }, (, ), [, ].

Input
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100个字符的字符串。

Output
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100的字符串。

Sample Input
Copy sample input to clipboard
3
a
2-[(1+2)*2]
(a+b])
Sample Output
Yes
Yes
No

我的代码

// Problem#: 19145// Submission#: 4806834// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/// All Copyright reserved by Informatic Lab of Sun Yat-sen University#include <iostream>#include <stack>#include <string> using namespace std;int main() {    int n;    string temp;    stack<char> s;    cin >> n;    if (n <= 0) return 0;    while (n--) {        bool flag = true;        cin >> temp;         for (int i = 0; i < temp.size(); i++) {            if (temp[i] == '{' || temp[i] == '(' || temp[i] == '[') {                s.push(temp[i]);            } else if (temp[i] == '}' || temp[i] == ')' || temp[i] == ']') {                if (s.empty()) {                    flag = false;                    break;                }                if ((temp[i] == '}' && s.top() == '{') ||                     (temp[i] == ')' && s.top() == '(') ||                    (temp[i] == ']' && s.top() == '[') ) {                    s.pop();                } else {                    flag = false;                    break;                }            }        }         if (!s.empty()) flag = false;        if (flag == false) cout << "No" << endl;        else cout << "Yes" << endl;        temp.clear();        while (!s.empty()) s.pop();    }    return 0;}                                 
0 0