2013-11-26 65 views
1
​​

這是一個簡單程序的代碼,用於統計多少個字符串輸入是多餘的。 除了我需要輸入兩次結束文件(ctr + z)才能結束循環並獲得結果,一切看起來都正常。我無法弄清楚爲什麼會發生這種情況。C++ count冗餘字符串

+0

'而(CIN >> X) 「可能不會做你認爲的事!請參見[這裏](http://stackoverflow.com/search?q= [c%2B%2B] +%22while +%28cin +%3E%3E + x%29%22)... –

+0

[while cin >> x)和文件結束問題](http://stackoverflow.com/questions/1078218/while-cin-x-and-end-of-file-issues) –

+0

@ g-makulik這不是在這個循環之後,cin不再被使用 – Slava

回答

4

這樣看來,你正試圖走出EOF字符以線序的結尾:

> This is my inputEOF 

這將迫使你進入另一個EOF真正結束流。如果你想用一個EOF結束流,你需要點擊進入第一:

> This is my inputENTER 
> EOF 
+1

請注意,受支持的OS(Linux,OS X等)上的Ctrl-D行爲方式相同。 – WhozCraig

+0

我在問題中運行了代碼,並且發現了另一個奇怪的事情:如果輸入是:like like hateEOF hateEOF愛EOF(在新行中)結果是:相同的字符串編號:1,但它是2!你能解釋一下嗎? –

+1

@ T-D您必須在EOF標記('std :: cin.clear()')之後清除錯誤狀態。在嘗試重新閱讀之前,您還需要忽略EOF字符。請記住,以這種方式使用EOF(意思是「流結束」)應該實際上意味着輸入流的結束。把它當作入場券之間的休息並不是好習慣。 –

0

您可以顯著簡化你的代碼,如果你使用std::set

int main() 
{ 
    cout << "Input strings(end-of-file to exit):"<<endl; 
    set<string> strings; 
    string x; 
    int same_string=0; 

    while (cin >> x) 
    { 
     if(!strings.insert(x).second) ++same_string; 
    } 

    cout << "Same string number:" << same_string << endl; 

    system("pause"); 
    return 0; 
}