2015-10-20 103 views
2

我有一個for循環,它向後返回用戶的輸入。他們輸入一個字符串,循環反轉它。這裏是什麼樣子:C++將For循環的輸出分配給變量

string input;       //what user enters 
const char* cInput = input.c_str(); //input converted to const char* 

for(int i = strlen(cInput) - 1; i >= 0; i--) 
    cout << input[i];  //Outputs the string reversed 

而不必cout << input[i]的,我怎麼能設置input[i]作爲一個新的字符串的值?就像我想要一個名爲string inputReversed的字符串並將其設置爲input[i]

換句話說,如果input == helloinput[i] == olleh,我想設置inputReversed等於olleh

這是可行的嗎?謝謝!

+0

考慮使用['std :: string :: size'](http://www.cplusplus.com/reference/string/string/size/),而不是轉換爲'const char *'並使用'strlen'。 –

回答

1

如果我明白你在問什麼,你想有一個變量來存儲反向字符串和輸出? 如果是的話你可以做到這一點

string input, InputReversed; 
         //what user enters 
const char* cInput = input.c_str(); //input converted to const char* 

for(int i = strlen(cInput) - 1; i >= 0; i--){ 

    InputReversed += input[i];  

} 
cout << InputReversed; //Outputs the string reversed 
0

去關閉這個線程可以幫助你。 How do I concatenate const/literal strings in C?

看來你想要的是創建一個新的字符串,在循環結束時將包含向後輸入。

string input;       //what user enters 
const char* cInput = input.c_str(); //input converted to const char* 
char inputReversed[len(input)]; 

for(int i = strlen(cInput) - 1; i >= 0; i--) 
    output = strcpy(output, input[i]);  //Outputs the string reversed 
2

只需要聲明輸出字符串和追加到它,無論是與+=append成員函數:

string inputReversed; 

for(int i = input.size() - 1; i >= 0; i--) 
    inputReversed += input[i];   // this 
// inputReversed.append(input[i]); // and this both do the same thing 

注意,你不需要c_strstrlen,你可以簡單地使用sizelength成員函數。

您也可以使代碼更易讀使用std::reverse

string inputReversed = input; 
std::reverse(inputReversed.begin(), inputReversed.end()); 

或者std::reverse_copy,因爲你正在做原始字符串的副本反正:

string inputReversed; 
std::reverse_copy(input.begin(), input.end(), std::back_inserter(inputReversed)); 
+0

謝謝,我喜歡這種方法。我沒有使用相反的功能,因爲我想做一個迴文檢測器作爲初學者練習:) –

2
string inputReversed(input.rbegin(), input.rend()); 
+0

不錯,非常聰明! – emlai