有一行括号序列,请你检查这行括号是否配对。
发布网友
发布时间:2022-05-05 07:00
我来回答
共3个回答
热心网友
时间:2023-10-14 06:28
你这个程序有的不着边。看看这个程序:
#include<stdio.h>
int main(void)
{
int n,i,j,top,flag;
char s[10000],st[5000];
char c;
scanf("%d\n",&n);
for(i=1; i<=n; i++)
{
top=-1;
scanf("%s",s);
flag=0;
for(j=0; c=s[j]; j++){
if(c=='[' || c=='('){ //遇到左括号,则存入数组st(模拟栈操作——进栈)
top++;
st[top]=c;
}else{ //遇到右括号,检查匹配情况
if(top<0){ flag=1; break; } //栈为空,不匹配,跳出循环
if(c==']' && st[top]=='[' || c==')' && st[top]=='(') //与栈顶匹配,——退栈
top--;
else //与栈顶不匹配,跳出循环
{ flag=1; break; }
}
}
printf("%s -- ", s);
if(flag || top>=0) printf("No\n");
else printf("Yes\n");
}
return 0;
}
热心网友
时间:2023-10-14 06:28
for(i=1;i<=n;i++)
{
for(m=0;m<=2;m++)
scanf("%c",&s[m]);
这段改成:
for(i=1;i<=n;i++)
{
getchar();
for(m=0;m<=2;m++)
scanf("%c",&s[m]);
……
因为你在scanf("%c",&s[m])之前都有一个回车,所以这个回车会赋给s[m],为了吃掉这个回车,要加个getchar()
热心网友
时间:2023-10-14 06:29
你这边的字符串的长度不一定是3,可用gets();读入追问为什么不是3呢?