2012-12-04 106 views
0

基本上,我已經設法寫出這個,並且設法顛倒了一個單詞!但是當我嘗試顛倒一個包含2個或更多字的字符串時,我無法獲得輸出。任何人都知道如何解決這個問題,或者是一些提示?讀取字符串的長度,然後反轉/反轉字符串

#include <iostream> 

using namespace std; 

int main() 
{ 
     char words[100]; 
     int x, i; 

     cout<<"Enter message : "; 
     cin>>words; 

     x = strlen(words); 
     //This two line is used to reverse the string 
     for(i=x;i>0;i--) 
     cout<<words[i-1]<<endl; 

    system("pause"); 
    return 0; 
} 
+0

爲什麼你使用C字符串,如果它應該是一個C++作業? –

+1

爲什麼不使用'string'?將'char words [100]'改爲'string words'並將'x = strlen(words)'改爲'x = words.length()' – Maroun

+2

此外,'cin >> words'將停止解析第一個空白字符。你需要使用像getline()這樣的東西。 – Angew

回答

1

你可以使用std::string而不是C字符數組,也可以用字符串:: reverse_iterator的閱讀逆序詞。要讀取多個由空格分隔的單詞,您需要使用std :: getline。

std::string words; 
std::getline(std::cin, words, '\n'); //if you read multiple words separated by space 

for (string::reverse_iterator iter = str.rbegin() ; iter != str.rend(); ++iter) 
{ 
    std::cout << *iter; 
} 

,或者使用std::reverse

std::reverse(words.begin(), words.end()); 
+0

你的代碼中的問題是int,cin操作符>>只從流中讀取一個單詞。 –

2

的問題是不與字符數組VS的std :: string - 它是與輸入方法。

變化cin>>wordscin.getline(words, sizeof(words), '\n');

我猜這個任務的分配習慣陣列,所以用字符數組堅持 - 否則,是的,的std :: string是去簡單易用的方式。

+0

老兄,謝謝!你是一個救生員。我的講師從來沒有想過我這個「getline」的東西。不管怎麼說,還是要謝謝你! – user1874983

0

使用cin.getline(words,99) insted cin>>words,因爲cin >>字將只獲得字符數組到第一個空格。