673 - Parentheses Balance

题意就是输入一行包含()和[]的字符串,检查每对括号是否匹配得上,能就Yes否则No。
然而题目好坑啊根本没说输入字符串里会含有空格,所以一开始用cin读取string总是蜜汁WA,调试了很久才发现得用getline,而且要注意一开始用cin读取一个整数n后,换行符会被cin忽略从而留在输入缓冲区里,下面getline碰到换行符就直接结束不读了,相当于多了一个空串。所以在cin完整数n后要再加一句getchar读取剩下的换行符。

#include 
#include 
#include 

using namespace std;

int main() {
    int n;
    cin >> n;
    getchar();
    for (int i = 0; i < n; i++) {
        string str;
        getline(cin, str);
        stack s;
        for (int j = 0; j < str.length(); j++) {
            // 只有括号匹配的情况下才出栈
            if (str[j] == ')' && !s.empty() && s.top() == '(') {
                s.pop();
            }
            else if (str[j] == ']' && !s.empty() && s.top() == '[') {
                s.pop();
            }
            // 其余情况全部入栈
            else {
                s.push(str[j]);
            }
        }
        // 如果所有的括号都匹配的话,栈肯定是空的
        if (s.empty())
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
    return 0;
}

你可能感兴趣的:(673 - Parentheses Balance)