注意:空行要输出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();
}
}
}