2013-04-08 52 views
1

用戶輸入的字符串看起來是顛倒的,但它後面跟着一堆垃圾字符。這裏是我的反向功能:當我嘗試在C++中反轉cstring時,我收到了一堆額外的字符

void reverse(char str[]) 
{ 
    char reversed[MAX_CHAR]; 

    for(int i = 0; i < strlen(str); i++) 
    { 
     reversed[i] = str[strlen(str) - i - 1]; 
    } 

    cout << reversed << endl; 
} 
+0

順便說一下,C++有'std :: reverse'。 – chris 2013-04-08 03:17:50

+1

不要使用多字節字符串來嘗試此操作。 – 2013-04-08 03:35:28

回答

4

您需要用NULL字符'\0',ASCII值0來結束你的字符串。

試試這個:

void reverse(char str[]) { 
    char reversed[MAX_CHAR]; 
    int len = strlen(str); 

    for(int i = 0; i < len; i++) { 
    reversed[i] = str[len - i - 1]; 
    } 

    reversed[len] = '\0'; // Add this 

    cout << reversed << endl; 
} 

這是怎麼CC++知道該字符串的結尾。

瞭解更多關於空值終止字符序列:

+0

這正是我需要的感謝!有趣的是我認爲我嘗試過,但我輸入'\ n'而不是'\ 0',因爲我認爲你應該用一個換行符結束字符串而不是空字符。謝謝你的幫助! – chillpenguin 2013-04-08 03:28:33

+0

@chillpenguin - 沒問題。是的,當你將它與['getline()'](http://www.cplusplus.com/reference/string/string/getline/)之類的讀取輸入相比較時,可能會引起混淆,直到新行。 – Aiias 2013-04-08 03:30:29

0

就可以解決這個在2種方法或者通過 一個)初始化用空字符

反轉陣列
char reversed[MAX_CHAR] = {0}; 

b)在反轉字符串的末尾添加空字符。

reversed[strlen(str)] = '\0'; 
相關問題