zoukankan      html  css  js  c++  java
  • 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;
    	}
    }



    
    
                
  • 相关阅读:
    Java安全之对称加密、非对称加密、数字签名
    Java 设计模式 之 中介者模式(Mediator)
    使用jquery获取radio的值
    java6枚举类型
    java http头信息
    怎样用java生成GUID与UUID
    struts2国际化
    JSON.stringify(),JSON.parse(),toJSON()方法使用
    阻塞队列之六:LinkedBlockingDeque
    jQuery给控件赋值....
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789385.html
Copyright © 2011-2022 走看看