2014-09-28 58 views
0

這裏是我的功能,以扭轉一個字符串:試圖在C++中反轉字符串,但亂碼會出現在反轉字符串處?

void reverse(char *str){ 

    int lengthStr = strlen(str); 
    int j, i; 
    char reversedString[100]; 

    for (j = 0, i = lengthStr-1; i >= 0; i--, j++){ 
     reversedString[j] = str[i]; 
    } 

    cout << reversedString; 
} 

爲反向的字符串確實出現,但最後有一堆的出現奇怪的字符。什麼可能導致這個問題?

+2

你從哪裏終止反向字符串?無處不在...這就是爲什麼你在最後得到垃圾。另外,你正在處理C字符串,而不是C++字符串。 – 2014-09-28 04:43:32

+0

如果你真的使用C++避免字符reversedString [100] – 2014-09-28 04:43:48

+1

'std :: reverse_copy'已經這樣做。或者,使用'std :: string'並使用它的'rbegin()'和'rend()'創建一個新的字符串。 – chris 2014-09-28 04:44:15

回答

2

如果你想扭轉串目前已經有很多類似的方法清潔:std::reverse_copy等 但是,如果你想解決這個功能,那麼試試這個:

char reversedString[100]; 
memset(reversedString, 0, 100*sizeof(char); 

OR

for (j = 0, i = lengthStr-1; i >= 0; i--, j++){ 
    reversedString[j] = str[i]; 
} 

reversedString[j] = '\0'; //! Add null character at the end to indicate end of the string 
cout << reversedString; 

注意:如果輸入字符串有length >= 100,程序將失敗。

1

將零分配給您分配給reversedString的字符。否則,新字符串的單位多餘部分將顯示爲垃圾。零用於標記字符串的結尾。

1

首先該功能無效,沒有任何意義。您不會反轉原始字符串,並且函數中定義的本地字符串可能小於原始字符串。此外,您不要追加反轉的本地字符串與終止零。該功能可以像

void reverse(char *str) 
{ 
    size_t n = std::strlen(str); 

    for (size_t i = 0; i < n/2; i++) 
    { 
     char c = str[i]; 
     str[i] = str[n - i - 1]; 
     str[n - i - 1] = c; 
    } 
} 

原來的逆轉字符串可以在調用該函數的代碼顯示。