2013-09-30 19 views
-1

我需要計算唯一字的數量,並使用下面的代碼,它似乎沒有正確計算。我不知道我還能做些什麼才能使它工作,並真的很感激任何建議。我在查找獨特單詞時遇到問題,如何改進代碼?

#include <iostream> 
#include <string> 
#include <set> 
using std::string; 
using std::set; 


unsigned long countUWords(const string& s) 
{ 
    set<string> uw; 
    string word = ""; 
    for(size_t i = 0; i < s.size(); i++){ 
     bool words = (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'); 
      if(words){ 
       word += s[i]; 
      } 
      else if(!words && word != ""){ 
       uw.insert(word); 
       word = ""; 
      } 
    } 
    if (word != "") 
     uw.insert(word); 
    return uw.size(); 
} 

int main() 
{ 
    string s; 
    unsigned long UWords = 0; 
    while(getline(cin, s)){ 
     UWords += countUWords(s); 
    } 
    cout << UWords << endl; 
    return 0; 
} 
+5

將所有單詞放在字典中,其中的值是出現次數。完成後,唯一的是每個出現一次的那些。 – Renan

+0

它在哪裏失敗? –

+1

當你說「獨特」時,你的意思是「獨特」還是「僅出現一次」? – jwismar

回答

0

for循環中,您需要檢查是否word是空的結束。如果不是,則需要將集合中的word的內容推送出去。

for循環結束支架後,加入:

if (word != "") 
    uw.insert(word); 

由於you can see它的工作原理是修改後就好了。

+0

好的,謝謝。我以爲我之前在我的代碼中有這個部分。但是,我仍然無法打印出正確數量的唯一字詞。我想我的int main()中有一些錯誤。 – user2829430

+0

@ user2829430,上面提到的編輯後代碼沒有問題(如上所示)。如果您的代碼的其他部分存在其他錯誤或意外行爲,我建議您創建另一個問題。 – Shoe

+0

我包含我的int main(),因爲我相信它有什麼問題,只是不確定究竟是什麼,但我懷疑它是getline的東西? – user2829430