-3

先生は、文字配列の順序を逆にするプログラムを書いてほしいと言っています。ユーザーが「hello」と入力すると、プログラムは「olleh」を出力します。

与えられた関数は次のとおりです。

void reverse_string(char coolstring[11], char newcoolstring[11])
{
    int count = 0, count2 = 0;

    while(coolstring[count] != '\0')
    {
        count++;
    }
    count -= 1;

    cout << coolstring[count];
    system("pause");

    while(coolstring[count] != 0)
    {
        newcoolstring[count] = coolstring[count2];
        count -= 1;
        count2 += 1;
    }   
}

しかし、それは機能せず、機能させようとしているときに理由がわかりません。正しい方向に向けていただけますか?

どんな助けでもいただければ幸いです

4

2 に答える 2

3

これは自分で解決する必要がありますが、正しい方向に導くことができるものは次のとおりです。

それが次のようになっているとしましょうcoolstring:

 0  |  1  |  2  |  3  |  4  |  5
'h' | 'e' | 'l' | 'l' | 'o' | '\0'

このループは、この文字列のサイズを取得します。

while(coolstring[count] != '\0')
    count++;

ただしcount、インデックスとして使用する必要がありcount、この場合は 5 であるため、終了 ( '\0') 文字をコピーしたくないため、最初から開始する必要があります(これが、ループ後にデクリメントされた後coolstring[4]に出力するポイントです。 .. であることを認識させるために)。coolstring[count]countwhile'o'

次のコードを見てください。

while(coolstring[count] != '\0')
{
    newcoolstring[count] = coolstring[count2];
    count--;
    count2++;
} 

次の質問を自問してください。

  1. で開始してデクリメントするのcoolstring[count]と同じになるのはいつですか?'\0''o'count
  2. newcoolstringこのループをどのように処理しますか?
于 2013-03-29T22:51:21.970 に答える
0

それがどのように機能していないかについて、より具体的な説明が必要だと思います。どの入力を試してみましたか? どのような間違った動作が得られましたか?

あなたの例から、おそらくエラーは、元の文字列の最後の文字しか表示できないということです。これは、行の直前に、それを行うための cout ステートメントがあるためですsystem("pause")。出力文字列を他の場所に表示しますか?

于 2013-03-29T22:36:43.313 に答える