括号匹配(c语言)(计数法)

题目描述
现在,有一行括号序列,里面只包含”(“,”)”,”[“,”]”四种符号,请你检查这行括号是否配对。如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的

#include<stdio.h>
#include<string.h>
int main()
{char skr[100];
aa:int s1=0;
int s2=0;
int s3=0;
int a1[100]={0},b1[100]={0},c1[100]={0},a2[100]={0},b2[100]={0},c2[100]={0};
int i,j=0,k=0,m=0,l=0,n=0,o=0,t,x,y,z;
while(gets(skr))
{if(skr[0]=='\0')
break;
for(i=0;skr[i]!='\0';i++)
{if(skr[i]=='(')
{s1++;a1[j]=i;j++;}
else if(skr[i]=='[')
{s2++;b1[k]=i;k++;}
else if(skr[i]=='{')
{s3++;c1[m]=i;m++;}
if(skr[i]==')')
{a2[l]=i;l++;
if (s1==0)
{printf("no\n");
goto aa;}
}
else if(skr[i]==']')
{b2[n]=i;n++;
if(s2==0)
{printf("no\n");
goto aa;}
}
else if(skr[i]=='}')
{c2[o]=i;o++;
if(s3==0)
{printf("no\n");
goto aa;}
}
if(skr[i]==')'&&s1!=0)
{s1--;
}
else if(skr[i]==']'&&s2!=0)
{s2--;
}
else if(skr[i]=='}'&&s3!=0)
{s3--;
}
}
if(s1==0&&s2==0&&s3==0)
{if(j!=0&&k!=0&&m!=0)
{for(x=0;x<j;x++)
{for(y=0;y<k;y++)
{for(z=0;z<m;z++)
{if((a1[x]>b1[y]&&a2[j-1-x]>b2[k-1-y]&&a1[x]<b2[k-1-y])||(a1[x]>c1[z]&&a2[j-1-x]>c2[m-1-z]&&a1[x]<c2[m-1-z])||(b1[y]>a1[x]&&b2[k-1-y]>a2[j-1-x]&&b1[y]<a2[j-1-x])||(b1[y]>c1[z]&&b2[k-1-y]>c2[m-1-z]&&b1[y]<c2[m-1-z])||(c1[z]>a1[x]&&c2[m-1-z]>a2[j-1-x]&&c1[z]<a2[j-1-x])||(c1[z]>b1[y]&&c2[m-1-z]>b2[k-1-y]&&c1[z]<b2[k-1-y]))
{printf("no\n");
goto aa;}
}}}printf("yes\n");
goto aa;}
else if(m==0)
{for(x=0;x<j;x++)
{for(y=0;y<k;y++)
{if((a1[x]>b1[y]&&a2[j-1-x]>b2[k-1-y]&&a1[x]<b2[k-1-y])||(b1[y]>a1[x]&&b2[k-1-y]>a2[j-1-x]&&b1[y]<a2[j-1-x]))
{printf("no\n");
goto aa;
}
}}printf("yes\n");
goto aa;}
else if(j==0)
{for(y=0;y<k;y++)
{for(z=0;z<m;z++)
{if((b1[y]>c1[z]&&b2[k-1-y]>c2[m-1-z]&&b1[y]<c2[m-1-z])||(c1[z]>b1[y]&&c2[m-1-z]>b2[k-1-y]&&c1[z]<b2[k-1-y]))
{printf("no\n");
goto aa;}
}
}printf("yes\n");
goto aa;}
else if(k==0)
{for(x=0;x<j;x++)
{for (z=0;z<m;z++)
{if((a1[x]>c1[z]&&a2[j-1-x]>c2[m-1-z]&&a1[x]<c2[m-1-z])||(c1[z]>a1[x]&&c2[m-1-z]>a2[j-1-x]&&c1[z]<a2[j-1-x]))
{printf("no\n");
goto aa;}
}}printf("yes\n");
goto aa;}
else
{printf("yes\n");
goto aa;}
}
else
{printf("no\n");
goto aa;
}}}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值