关于括号匹配的问题及其源码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
   char **p,c;
int i,j,k,sum,n,l;
char *q;
char a[100]={0};
while(scanf("%d",&n)!=EOF){

p=(char**)malloc(n*sizeof(char*));
for(i=0;i<n;i++)
{
*(p+i)=(char*)malloc(100*sizeof(char));
scanf("%s",*(p+i));

}


for(i=0;i<n;i++)
{
l=0;
int flag=1;

l=strlen(*(p+i)) ;

memset(a,0,100);


       q=&a[0];

for(j=0;j<l;j++)
{
 
switch(*(*(p+i)+j))
{
case '(':
*q=*(*(p+i)+j);


        q=q+1;
        
break;

case '[':
*q=*(*(p+i)+j);
     q=q+1;
        
break;
case '{':
*q=*(*(p+i)+j);
        q=q+1;
        
break;
   case ')': 
if(q!=a&&*(q-1)=='('){
q--;

    }
    else
    {
    flag=0;
}
break;
case  '}':
if(q!=a&&*(q-1)=='{'){
q--;
    }
    else
    {
    flag=0;
}


break;
case ']': 
   if(*(q-1)=='['&& q!=a ){
q--;

}
else
{
flag=0;
}
break;
}

}


if(q==a&&flag==1)
{printf("Yes\n");
}
else 
{printf("No\n");
}

}
free(p); }
return 0;
}







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值