1

これはラボ課題の一部です

次の機能を実装する必要があります...

void replaceChar(char s[], char c,int len)

説明:sのすべての文字をに置き換えますclenの長さを示しますs

これを私のクラスが使用しているオートグレーダーに提出すると、「置換された文字列の長さが異なる」と表示されます。これを広範囲にテストしましたが、問題は見られません。これが私の完全な機能です:

void replaceChar(char s[], char c, int len) {
    printf("\n");
    for (int i = 0; i < len; i++) {
        s[i] = c;
        printf("%c",s[i]);
    }
}

あなたが私に与えることができるどんな助けにも感謝します!

ここに私のテストケースのいくつかがあります:

char s1[5] = {'h','e','l','l','o'};

char s3[10] = {'h','e','l','l','o',' ','h','i','i','i'};
char rep1 = 'x';
replaceChar(s1,rep1,5);
replaceChar(s3,rep1,10);
4

1 に答える 1

2

私のコメントを参照してください:

NUL ターミネータを明示的にマークしようとしましたか?s[len] = '\0';

これで問題は解決しましたが、私はまだあなたの教授と連絡を取り、そもそもなぜこれが必要なのかを尋ねました. sラボでは、文字列を NUL で終了する必要があるとは指定していません。

余談ですが(もともと別の私のコメントで言及されていました)、初期化するときに文字列リテラルを使用する必要がありますs1s3つまり

char s1[] = "hello";
char s3[] = "hello hiii";

これにより、見た目がすっきりするだけでなく (また、配列の長さを明示的に言及する必要がなくなります)、文字列が最初から NUL で終了することも保証されます。

于 2012-09-09T20:07:07.200 に答える