-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'を次の 3 行でスキップします。

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 に答える