2014-04-18 90 views
0

我試圖計算在鍵盤上輸入一個句子時的單詞數量,但重複的單詞只能計算一次。在這種情況下,句子必須以特定字符串結尾,我將使用「eof」。 例如,當我輸入:「這是一個單詞這個單詞」,結果應該是4個單詞。計算鍵盤的單詞。不計算重複

我的代碼是:

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

using namespace std; 

int main() { 
    string input; 
    vector<string> sentence; 
    int n=0; 

    while (cin >> input && input!="eof") 
    {int i=0; 
     while (input!= sentence[i] && i<sentence.size()) 
     { 
     i++; 
     } 
     if (i==sentence.size()) 
      sentence.push_back(input); 

    } 
    cout << "\nNumero de palavras: " << sentence.size(); 

    return 0; 
} 

的代碼編譯沒有任何錯誤,但是當我運行它,它表示:「表達:向量下標越界有關你的程序是如何導致斷言失敗看資料斷言的Visual C++文檔。「

我的代碼有什麼問題?

回答

0

你需要扭轉的條件的順序while子句中:

while (i<sentence.size() && input!= sentence[i]) 

這是因爲,當陣列sentence仍然是空的,第一次比較i<sentence.size()將失敗;整個子句也是如此,無需檢查input!=sentence[i],當sentence爲空時沒有意義。

+0

是的,這是問題!謝謝。但現在當我輸入一個句子時,例如:「這是一個單詞這個單詞」,它包含5個單詞。它是否將eof算作一個單詞?但是,如果我將條件逆轉(cin >> input && input!=「eof」),它將只計算4個單詞。這是爲什麼?如果條件輸入!=「eof」在cin >>輸入之前,它不應該讀取eof。我對嗎? – user2880113