标签:
注意:空行要输出Yes,要用gets读函数,这道题让我学会了gets和scanf函数除了空格问题之外还是
有区别的,scanf把空格,Tab, 回车都视为结束标志,不会读入他们,后面自动加‘\0‘,所以空格,回车,Tab
都在缓冲区,可以用getchar()读取到,但是gets()函数虽然也将回车视为结束标志,但是他们会将回车读
入,读到字符串里是‘\0‘,所以,他们就不会存在缓冲区里,也就是说用getchar()读取不到他们了。。。
放代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<stack> using namespace std; char a[130]; int main() { stack <char> s; int n,flag,i; char ch; scanf("%d",&n); getchar(); while(n--) { flag=1; gets(a); // scanf("%s",a); if(a[0]=='\0') { puts("Yes"); continue; } flag=0; int len = strlen(a); for(i=0; i<len; i++) { if(a[i]=='('||a[i]=='[') { s.push(a[i]); } else { if(s.empty()) { puts("No"); flag=1; break; } else { ch = s.top(); s.pop(); if(a[i]==')') { if(ch!='(') { puts("No"); flag=1; break; } } else { if(ch!='[') { puts("No"); flag=1; break; } } } } } if(!flag) { if(s.empty()) puts("Yes"); else puts("No"); } while(!s.empty()) { s.pop(); } } }
标签:
原文地址:http://blog.csdn.net/sinat_22659021/article/details/46449217