2013-04-01 91 views
1

我已經寫了代碼扭轉一個字符串倒車的字符串:無用值

#include <iostream> 
#include <cstring> 

using namespace std; 

string Reversal(char * s); 

int main() 
{ 
    char str[25]; 

    cout << "Enter a Name :"; 

    cin.get(str, 25); 
    cout << "You have entered: " << str; 

    cout << "\nReversed : " << Reversal(str); 
    return 0; 
} 

string Reversal(char * s) 
{ 
    int count = strlen(s); 
    char temp[count]; 
    for (int i = 0; i < count; i++) 
    { 
     temp[i] = * (s + (count - 1) - i); 
    } 
    return temp; 
} 

都提到下面的鏈接,使CIN採取空格輸入:

How to cin Space in c++?

但輸出顯示一些垃圾字符?任何建議爲什麼如此? enter image description here

回答

4

當您隱含地從temp構建std::string時,後者預期會以NUL結尾,但事實並非如此。

變化

return temp; 

return std::string(temp, count); 

這將使用不同的構造函數,一個需要明確的字符數,不指望temp是NULL結尾。

2

temp數組中的最後一個字符應該以null結尾。使它長於輸入字符串的大小。使最後一個字符爲空字符('\0')。

string Reversal(char *s) 
{ 
int count=strlen(s); 
char temp[count+1]; //make your array 1 more than the length of the input string 
for (int i=0;i<count;i++) 
{ 
    temp[i]= *(s+(count-1)-i); 
} 

temp[count] = '\0'; //null-terminate your array so that the program knows when your string ends 
return temp; 
} 

空字符指定字符串的結尾。通常它是一個全0位的字節。如果你沒有指定它作爲臨時數組的最後一個字符,程序將不知道你的字符數組的末尾是什麼時候。它將繼續包括每個角色,直到找到一個'\0'