#include
int main()
{
int i,j,n,top=-1;
char s[1010],w[1010];//w为括号的栈,top为栈顶
scanf("%d",&n);
getchar();
for(i=0;i{
gets(s);
for(j=0;s[j]!='\0';j++) //遍历每一个字符串
{
if(s[j]=='(' || s[j]=='[') //如果是左括号,将其入栈
w[++top] = s[j];
else if(s[j]==')') //如果是右小括号,判断是否匹配
{
if(w[top] == '(')
top--;
else
{
printf("no\n");
break;
}
}
else if(s[j]==']') //如果是右中括号,判断是否匹配
{
if(w[top] == ']')
top--;
else
{
printf("no\n");
break;
}
}
}
if(s[j]=='\0') //如果循环没有在中间跳出,检查栈顶位置,最终检查是否匹配
{
if(top==-1)
printf("yes\n");
else
printf("no\n");
}
}
return 0;
}
你写的逻辑混乱,思路也不清晰。看看我的吧。
for(m=0;a[m]!='\0';m++) /*判断第i行的元素*/
{ if (m=0) {if (a[0]==']'||a[0]==')') flag[i]=0;}
此处if (m == 0)