2013-05-04 109 views
1
#include <iostream> 

using namespace std; 

int main() 
{ 
    string previous; 
    string current; 

    while (cin >> current) 
    { 
     if(current == previous) 
     { 
      cout << "repeated word"; 
     } 

     previous=current; 
    } 

    return 0; 
} 

我的問題是:CIN在while循環

  1. ,它指出while(cin>>current),爲什麼整個文本輸入的字符串沒有分配到當前的?我不明白它是如何單獨比較所有單詞的。

  2. 它是如何獲得一個詞來形容以前。它如何知道2個相同的單詞是相鄰的?

編輯:我想我只是明白了爲什麼。告訴我,如果我錯了,但我認爲它是因爲編譯器在該空間停止cin賦值,並且第一個單詞被分配給current,然後它將它與前一個單詞進行比較,但由於它是第一個單詞,因此它沒有一個前一個單詞,因此它只是將第一個單詞分配給前一個單詞,並比較該句子中的下一個單詞,直到沒有剩餘單詞。我相當肯定這是它的工作方式,但我會留下來以防萬一有人想知道類似的東西。

+1

流轉換爲字符串讀取字符直到下一個空格。剩下的事情:創建一個例子,並在循環的每一輪記下每個變量的值。 – stefan 2013-05-04 08:26:17

+0

這是瞭解'cin'如何工作的一個重要課程,僅僅是因爲你鍵入了一些東西,而某些東西已被讀取,並不意味着你輸入的所有內容都被讀取了。做好你自己的想法。 – john 2013-05-04 08:34:23

回答

1
  1. 如果使用帶有std :: string參數的std::istream::operator>>,它會讀取字符,直到找到任何空格字符。這意味着如果你輸入一個句子,它只會讀一個「單詞」。使用std::getline(cin, current);來讀取整行(直到換行符)。
  2. 您將當前分配給前一個:previous = current。這意味着在讀取current後,您可以製作previouscurrent。所以下一次,在你閱讀之前,你可以比較之前和當前,看看他們是否是同一件事。
2
  1. 默認行爲是當您在讀取字符串時停止空格。通過說std::cin >> std::noskipws可以將其更改爲讀取空格。
  2. 上一個單詞始終在循環的末尾分配。鑑於第一部分的答案,應該清楚爲什麼以前的作品。
+0

我明白了。我記得如何在白色空間停止。我厭倦了,因爲它已經有一段時間了,所以我忘記了我書中前一章的內容。 – ThePeskyWabbit 2013-05-04 08:29:31

0

如果你想使用字符串,則必須使用#include stringstd_lib_facilities.h