-4

任务说:

给定一个字符串,递归计算一个新字符串,其中所有“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......

4

1 回答 1

1

您的代码跳过了一个可能很重要的字符——这三行中的 a'\0'或 an :'x'

else if(a[b]=='x'){
    c[d]=a[b+1];
    return xx(a,b+2,d+1);
}

这段代码继续复制a[b+1],根本不检查那个字符。

你不应该在那里复制任何东西 - 只需前进b1并保持d原样:

else if(a[b]=='x'){
    return xx(a,b+1,d);
}

这样,下一级调用将检查a[b+1]您,根据需要停止或删除它。

于 2013-11-10T23:19:13.240 回答