673 - Parentheses Balance

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

#include <iostream>
#include <string>
#include <stack>

using namespace std;

int main() {
    int n;
    cin >> n;
    getchar();
    for (int i = 0; i < n; i++) {
        string str;
        getline(cin, str);
        stack<char> 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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 浅谈C++常用输入输出 在编写C++程序的时候,经常因为输入输出头疼,所以在这里做一个小结,记录一下常用的输入输出...
    MinoyJet阅读 3,777评论 0 6
  • C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终...
    LuckTime阅读 1,752评论 0 6
  • cin.get();cin.getline();cin.putback(); cout.put(char);<< ...
    LuckTime阅读 369评论 0 0
  • 01 唐代诗人韩偓有一首《寒食夜》,念作:恻恻轻寒翦翦风,小梅飘雪杏花红。夜深斜搭秋千索,楼阁朦胧烟雨中。 我多年...
    衷曲无闻阅读 4,365评论 141 143
  • 你张口闭口就是“作业写完了吗?”你可知道孩子结束了一天繁重的课业后,最想听的话其实是:“孩子,你今天过的开心吗?”...
    优胜家阅读 445评论 0 1