2010-12-13 6 views
2

これは私が今までに持っていたもので、私は間違いを続けています。どんな助け?私の機能に何か不足していますか?

void ReverseString(char* string) { 
    int len = strlen(string); 
    for(int i = 0; i < len; i++) 
    { 
     string[i] = string[len-i]; 
    } 
} 
+3

エラーを知って役立つだろう。 'for'ブロックの最後に' {'を使っているからですか? – birryree

+4

私はあなたが 'std :: string'と' std :: reverse'を自分で見逃していると思います。 –

答えて

6
  • i0あなたは私が意図正しくあなたをあなたを理解していれば長さ lenの配列内の有効なインデックスが[0,len-1]

ある として間違っている string[len]にアクセスすることがありますされます文字列を逆にしようとしていますが、いくつか欠けていることがわかります:

  • 交換していません。
  • また、アレイ全体の のスワップは、 のアレイではなく、アレイの半分のスワップになります。

次のスニペットは、これらの問題修正されます。すべての

int len = strlen(string); 
for(int i = 0; i < len/2; i++) { 
    swap(string[len-i-1],string[i]); 
} 
2

まず、あなたは}にライン上のエラー6.

変更{になるだろう。その後、もう一度試してください。あなたは、元の文字列から回文を作ってあげる

:2以外にも

+0

私のコピーエラーです。 Thatsはなぜ私がエラーを得るのではないのですか? –

+0

@Josh Lakeあなたは答えを受け入れたので、問題は解決したと思います。私を変更する必要はありません。 – Secko

1

は、既にエラーを述べました。前半は後半が逆になる。しかし、後半は同じままです。これは、関数名が宣言したものではありません。

0

string[i] = string[len-i-1];

// added (untested): 

void ReverseString(char * string) { 
    int len = strlen(string); 
    for(int i = 0; i < len/2; i++) 
    { 
     string[i] ^= string[len-i-1]; 
     string[len-i-1] ^= string[i]; 
     string[i] ^= string[len-i-1]; 
    } 
} 
+1

oops、文字列を逆にするとスワップが必要になる – ThomasMcLeod

+0

私は新人です - なぜインデントされませんか? – ThomasMcLeod

+0

コードを選択し、Ctrl + Kを押します。 – ruslik

1

これは、C++タグ付けされ、C++の方法、それを行うべきである...

std::string ReverseString(std::string str) 
{ 
    std::reverse(str.begin(), str.end()); 
    return str; 
} 
+1

'return std :: string(str.rbegin()、str.rend());'それでは、入力をconst参照として受け取ることさえできます。 –

関連する問題