任务说:
给定一个字符串,递归计算一个新的字符串,其中所有'x'字符都已被删除。
我的代码:
#include<stdio.h>
#include<string.h>
char c[50];
int xx(char a[],int b,int d){
if(a[b]=='\0')
return a;
else if(a[b]=='x'){
c[d]=a[b+1];
return xx(a,b+2,d+1);}
else {
c[d]=a[b];
return xx(a,b+1,d+1);
}
}
int main()
{
char a[50];
scanf("%s",a);
xx(a,0,0);
printf("%s",c);
return 0;
}
只要我没有在另一个x
旁边输入x
就行了。就像我输入xaxb
一样,结果将是ab
。
但如果我输入xxaxxb
,结果将为xaxb
...
答案 0 :(得分:1)
您的代码会跳过一个可能很重要的角色 - 这三行中的'\0'
或'x'
:
else if(a[b]=='x'){
c[d]=a[b+1];
return xx(a,b+2,d+1);
}
此代码继续执行并复制a[b+1]
而不检查该字符。
您不应该在那里复制任何内容 - 只需b
前进1
,并按原样保留d
:
else if(a[b]=='x'){
return xx(a,b+1,d);
}
这样,下一级调用会为您检查a[b+1]
,根据需要停止或删除它。