1、感谢上帝,这题交了7次终于过了!题目不难,问题是没用STL,直接用数组模拟栈,还自作聪明地想要省掉flag这个变量,所以才会造成错误!
2、flag和count是缺一不可的!否则空串和(】这两组数据通不过!
3、直接用STL就好了。。。只要判断栈空还是非空就好了!还是需要学习!!!
4、getchar要用得好才行。。。这个程序写完基本掌握透getchar了,真麻烦。。。早知道用fgets了,省事多了。。。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main(void)
{
int n,count;
bool flag;
char ch;
int a[140]={0};
scanf("%d\n",&n);
while(n--)
{
count=0;
flag=true;
memset(a,0,sizeof(a));
while((ch=getchar())!='\n')
{
if(ch=='(')
a[count++]=1;
if(ch=='[')
a[count++]=2;
if(ch==')')
{
count--;
if(count>=0&&a[count]==1)
a[count]=0;
else
flag=false;
}
if(ch==']')
{
count--;
if(count>=0&&a[count]==2)
a[count]=0;
else
flag=false;
}
if(count<0)
{
while((ch=getchar())!='\n');
break;
}
}
if(!flag||count!=0)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}