2011-06-23 86 views
2

我是C++的新手,現在我正在從名爲的書中學習加速的C++。我完成了第三章(矢量),然後我來到這個練習:std :: cout不工作在for循環內

「編寫一個程序來計算每個不同單詞在其輸入中出現的次數。」

經過一番思考,我開始研究它。我想測試該程序,但std :: cout不起作用。我在代碼的幾個地方放了cout << "test";來查看問題出在哪裏,結論是它在第一個for循環中不起作用。不要推薦我使用地圖來解決問題,因爲我正在處理矢量。變數不是英文的,所以我會翻譯一些給你,以便知道發生了什麼事情:

recenica - the sentence; rijec - 一個字; vel_vektora - 矢量的大小; duz_recenice - 句子的長度; br_ponavljanja - 單詞出現在句子中的次數;

#include <vector> 
#include <iostream> 
#include <string> 

using std::string;  using std::vector; 
using std::cin;   using std::cout; 
using std::endl; 



int main() 
{ 
    string rijec; 
    vector<string> recenica; 

    while (cin >> rijec) recenica.push_back(rijec); 
    cout << endl; 

    typedef vector<string>::size_type vel_vektora; 
    vel_vektora duz_recenice = recenica.size(); 
    cout << "test0, "; 

    for (int i = 0; i < duz_recenice - 1; ++i)    
    { 
     cout << "test, !"; 
     int br_ponavljanja = 1; 

     for (int j = i + 1; j < duz_recenice; ++j) 
     { 
       cout << "test2, "; 
       if (recenica[i] == recenica[j]) 
       { 
           cout << "test3, "; 
           ++br_ponavljanja; 
           recenica.erase(recenica.begin() + j); 
       }  
       cout << "test4, "; 
     }   
     cout << recenica[i] << ": " << br_ponavljanja << endl;   
    } 
    cout << "test5, ";     
    getchar(); 
    return 0;   
} 

std::cout有什麼問題?

+6

我建議你在調試器中一步一步地運行你的應用程序,並觀察變量的值來找出問題所在。如果向量中只有一個單詞,則不會執行外部for循環 –

+1

它如何「不工作」? – ybungalobill

+0

@Marius:+1思考角落案例始終是一個很好的調試提示。 – fredoverflow

回答

7

添加<< flush來刷新您的輸出緩衝區(每個地方)。

或使用<< endl,它們都添加換行和刷新。

代碼存在問題,特別是空輸入問題,但這就是您要了解的內容,所以我會讓您知道的! :-)

乾杯&心連心,

1

恐怕語言躲開我在變量名的條款,但這種「爲我工作™」。

這裏是我的輸出(前3行輸入:)

ytreyert 
tyryteter 
gdhdfgdf 
^Z 

test0, test, !test2, test4, test2, test4, ytreyert: 1 
test, !test2, test4, tyryteter: 1 
test5, 

你一定要嘗試打印後沖洗COUT緩衝區(按阿爾夫的答案)。

我注意到gdhdfgdf不計,這是因爲該行的:

for (int i = 0; i < duz_recenice - 1; ++i) 

如果你只給1個輸入字,這個循環將無法運行,因爲你之前循環做duz_recenice = recenica.size();

更改該行

for (int i = 0; i < duz_recenice; ++i) 

解決了這個問題。

+0

由於某種原因,它也適用於我,我做了潮紅。你想對這個循環說什麼?我必須確定單詞的數量,而你寫的for-loop行就在它的下面。 –

+0

代碼中的外層循環遍歷大小爲1的條目,所以它會錯過向量中的最後一個單詞。注意我的輸出顯示前兩個單詞的計數,但不是最後一個單詞。 – badgerr

+0

哦,我明白了你的觀點,但我仍然無法讓這個程序正確地計算我的話。例如,對於「我喜歡麪包麪包喜歡我」這樣的句子,最後它會統計「我」兩次,一次給我2號,第二次給我1號。這應該可以通過recenica.erase來解決線。 –