/*
本来读完题目以后的第一反应是,看上去挺简单的,直接先注释一下 "//水题"
不久就打脸了,我发现我错的有多离谱了...
先是太不仔细,没有考虑桟空的情况,存在桟空时仍 pop() 的情况,导致程序崩掉
后来又WA,发现我有细节没有考虑到,就是输入代表组数的数字以后,应该要用 getchar()吃掉一个回车
想着这样改完应该没问题了吧?结果还是WA...于是开始各处找题解了...
我发现在输入字符串的时候,我是用 cin 处理的,但几乎所有题解,都是用的 getline()
接着,突然惊觉,好像题目有说,空串合法,而 cin 是不能处理空串的,突然我就有点冷汗直冒了,太不仔细了
但是转念一想,发现一件更可怕的事情,其实我一开始就知道可以输入空串的,我真正的问题在于:
“我居然忘记了,cin是不能输入空串的,只有 getline() 才可以!!!”
想起之前做小白书上的题时,尤其 STL 那一章时,其实是各种输入格式都来了个遍的,我以为我应该已经很熟悉 cin、getline(cin, s)、cin.get() 、cin.getline()这些函数了,毕竟题目都做了那么多了...
然而做到数据结构章节时,还是忘掉很多了...难怪温故知新,温故在前,知新在后。难怪说好记性不如烂笔头,好在我之前的题解都存了下来,写在了博客上。我决定以后刷题前,先找自己之前做过的题瞄几眼,看看自己还会不会做,再做新的
--------------------------言归正传的分界线--------------------------
cin:遇到空格,回车或者制表符就会结束输入,这样就导致了我们不能输入一个带有空格的字符串。
cin.get(),cin.getline() :都表示每次读取一行字符串输入。
cin.getline()和cin.get() 这两个函数都读取一行输入,直到达到换行符。然而,随后cin.getline()将丢弃换行符,而cin.get()将换行符保留在输入序列中。
(摘自: http://blog.youkuaiyun.com/elohims/article/details/23560743 )
从函数原型可以看出来cin.getline和cin.get只能接受C风格的字符串
若想读取字符串到C++string 对象中,可以用 getline() 函数
*/
/*
查阅过的超链接的保存:
http://blog.youkuaiyun.com/elohims/article/details/23560743
http://bbs.youkuaiyun.com/topics/390858357
https://zhidao.baidu.com/question/362328053.html
http://blog.youkuaiyun.com/testing2007/article/details/5314653
http://www.cnblogs.com/wlzy/p/5897742.html
*/
#include <iostream>
#include <string>
#include <stack>
using namespace std;
string str;
int check()
{
getline(cin, str);
stack<char> s;
while(!s.empty()) s.pop();
for (int i = 0; i < (int)str.size(); i++)
{
switch(str[i])
{
case '(':
case '[': s.push(str[i]); break;
case ')': if (s.empty() || s.top() != '(') return 0; s.pop(); break;
case ']': if (s.empty() || s.top() != '[') return 0; s.pop(); break;
default: return 0;
}
}
if (s.empty()) return 1;
return 0;
}
int main()
{
int n;
cin >> n;
getchar();
for (int i = 0; i < n; i++)
{
if (check())
cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}