c语言递归判断大中小括号是否匹配的问题,这个程序我没想通哪里出问题,大牛帮我看一看,我不想用栈解决

#include<stdio.h>intcount1=0,count2=0,count3=0;intfun(char*p){if(*p=='{'&&*p!='\0'){c... #include<stdio.h>
int count1=0,count2=0,count3=0;
int fun(char *p){
if(*p=='{'&&*p!='\0'){
count1++;
fun(++p);
}
if(*p=='}'&&*p!='\0'){
count1--;
if(count1<0)
return 0;
fun(++p);
}
if(*p=='('&&*p!='\0'){
count2++;
fun(++p);
}
if(*p==')'&&*p!='\0'){
count2--;
if(count2<0)
return 0;
fun(++p);
}
if(*p=='['&&*p!='\0'){
count3++;
fun(++p);
}
if(*p==']'&&*p!='\0'){
count3--;
if(count3<0)
return 0;
fun(++p);
}
if(*p=='\0'){
if(count1==0&&count2==0&&count3==0)
return 1;
}
fun(++p);
// if(count2==0)
// return 2;
//if(count3==0)
// return 3;
}

int main()
{

// char *p="{}()]dyddufufj)";
char *s="{}}";
int i,j;
//i=fun(p);
j=fun(s);
if(j==0)
printf("不匹配");
else
printf("匹配");
return 0;
}
展开
 我来答
fallx
2019-11-12 · TA获得超过5486个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:760万
展开全部

你的问题估计出在fun函数里if判断中,达成条件return了结果后,下一步的fun(++p)都不会再执行。当某一个计数器小于0时,你期望的继续递归没了。其实没那么复杂。我改了一个给你。纯手机输入,请采纳。

#include <stdio.h>
#include <stdlib.h>
int fun(char *p){
  int k1=0,k2=0,k3=0;
   while(*p!='\0'){
       if(*p=='{')
           k1++;
       if(*p=='[')
           k2++;
       if(*p=='(')
           k3++;
       if(*p=='}')
           k1--;
       if(*p==']')
           k2--;
       if(*p==')')
           k3--;
       p++;
       }
   if(k1!=0||k2!=0||k3!=0){
     return 0;
   }
       
   return 1;  
   }
int main(){
   char *p="[()])";
   if(fun(p))
       printf("ok");
   else
       printf("no");
   return 0;
   }

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式