2010-12-13 42 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 2010-12-13 16:54:52

+4

我認爲你自己缺少'std :: string'和'std :: reverse'。 – 2010-12-13 17:05:07

回答

6
  • i0你會被訪問 string[len]這是不正確的, 長度的數組的有效索引 len[0,len-1]

如果我理解你的意圖正確,您正試圖扭轉字符串,但我可以看到一些遺漏的東西:

  • 你不換。
  • 此外,交換應發生 陣列的一半,而不是 整個陣列。

下面的代碼片段修復這些問題:

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

首先,你會得到一個錯誤,第6行

更改{}。然後再試一次。

+0

這就是我的複製錯誤。這不是爲什麼我得到錯誤,但是。 – 2010-12-13 17:01:01

+0

@Josh Lake你接受了一個答案,所以我猜這個問題已經解決了,並且我沒有必要更換我的。 – Secko 2010-12-13 17:29:02

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 2010-12-13 17:06:03

+0

我是一個新手 - 爲什麼不會代碼縮進? – ThomasMcLeod 2010-12-13 17:21:52

+0

選擇代碼並按下「Ctrl + K」。 – ruslik 2010-12-13 17:24:04

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引用。 – 2010-12-13 18:48:28

相關問題