UVA

/*
  本来读完题目以后的第一反应是,看上去挺简单的,直接先注释一下 "//水题"
  不久就打脸了,我发现我错的有多离谱了...
  
  先是太不仔细,没有考虑桟空的情况,存在桟空时仍 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.csdn.net/elohims/article/details/23560743 )
  
  从函数原型可以看出来cin.getline和cin.get只能接受C风格的字符串
  若想读取字符串到C++string 对象中,可以用 getline() 函数 
  
*/

/*
  查阅过的超链接的保存:
  http://blog.csdn.net/elohims/article/details/23560743
  http://bbs.csdn.net/topics/390858357
  https://zhidao.baidu.com/question/362328053.html
  http://blog.csdn.net/testing2007/article/details/5314653
  http://www.cnblogs.com/wlzy/p/5897742.html

*/


#include <iostream>
#include <string>
#include <stack>
#define rep(i, n) for ( int i = 0; i < (n); i++ )
using namespace std;

string s;

bool solve()
{
	stack<char> tp; // tp: temp
	int len = (int) s.size();
	
	rep(i, len)
	{
		switch( s[i] )
		{
			case '(': 
			case '[':
			tp.push( s[i] ); break;
			
			
			case ')':
			if ( tp.empty() || tp.top() != '(' ) return false; //注明一下,这样的写法不会有错,不会在桟空时仍对其取 top()的,原因可搜索 "逻辑运算符 短路效应" 
			tp.pop();  break;
			
			case ']':
			if ( tp.empty() || tp.top() != '[' ) return false;
			tp.pop(); break;
		} 
	}
	
	if (tp.empty())	return true;
	else return false;
}

int main ()
{
	int n;
	cin >> n;
	getchar();
	while (n--)
	{
	//	cin >> s; //绝对不能用 cin 的,我当时是遗忘了知识才会本能用 cin ,现在十分惭愧 
		getline(cin, s);
		if ( solve() ) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
}





            
原文地址:https://www.cnblogs.com/mofushaohua/p/7789385.html