
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;
} 展开
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;
} 展开
1个回答
展开全部
你的问题估计出在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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询