0

私はStroustrupのC++プログラミング言語を使用して作業してきましたが、初期の演習で問題が発生しています。タスクは、acスタイルの文字列を逆にするメソッドrevを作成することです。私のロジックは正しいと思いますが、文字列を変更しようとするとエラーが発生します。これはできませんか?

int strlen_(char* string)
{
    int count = 0;
    while (*string != '\0'){
        count ++;
        string ++;
    }

    return count;
}

void rev(char* string)
{
    //length of the string is going to be useful 
    int len = strlen_(string);

    //two counters, one going forward, one going back

    int forwardIndex = 0;
    int backwardIndex = len-1; 

    char temp;
    while (forwardIndex < backwardIndex){
        temp = string[forwardIndex];
        string[forwardIndex] = string[backwardIndex];   //Exception Here
        string[backwardIndex] = temp;
        forwardIndex--;
        backwardIndex--;
    }

}

void main()
{
    char* test = "test"; 
    rev(test);
}
4

2 に答える 2

5

リテラル文字列を変更することはできません。逆関数は文字列引数を変更します。

代わりに次のようなものを渡して逆関数をテストします。

void main()
{
    char test[] = "test";
    rev(test);
}

"test"これにより、変更可能な配列にリテラル文字列のコピーが作成されます。

また、forwardIndexand : の両方をデクリメントしています:をインクリメントbackwardIndexする必要があります。アイデアは、インデックスが途中で一致するということです。 forwardIndexforwardIndex++

于 2012-10-17T19:15:53.093 に答える
0

forwardIndex をデクリメントしているようです。最初の実行後は -1 になります。を探してforwardIndex--;変更するforwardIndex++;

于 2012-10-17T19:19:35.480 に答える