2017-10-11 252 views
0

我是新來的這個地方,所以我可能不會問清楚我的問題。但我確實需要幫助。所以我的作業是用C++創建一個拼寫檢查器,它接受一個文本文件並將其與另一個字典文本文件進行比較。我有一個特定的代碼片段,我需要解決。我創建了一個幫助函數isValidWord,它接受容器unordered_set和字符串的字典。如果字符串匹配字典中的單詞,該函數將返回true。我只會告訴你我到目前爲止。我的問題是該字符串與庫中的所有內容不匹配,只檢查字典中的一些內容。拼寫檢查器C++;檢查單詞是否在字典文本

#include <unordered_set> 
#include <string> 
bool isValidWord(std::unordered_set<std::string> dictionary, std::string& word) { 
     std::unordered_set<std::string>::iterator it; 
     for (it = dictionary.begin(); it != dictionary.end(); ++it) { 
      if (word == *it) { 
       return true; 
      } 
     } 
     return false; 
    } 
+2

是否與信件CASE不匹配? –

+0

你能顯示一個示例輸入,其中的字符串與所有內容都不匹配嗎? –

+2

@CodeGorilla案例問題已經處理 – Yang

回答

3

有一個內置的find method in unordered_set,您可以利用,而不是另起爐竈。此外,通過引用通過dictionary以避免無意義的複製是一個好主意。

+0

對於硬件不太好。 – gsamaras

0

您可以用(我加失蹤const和參考太)簡化您的方法:

bool isValidWord(const std::unordered_set<std::string>& dictionary, 
       const std::string& word) 
{ 
    return dictionary.count(word) != 0; 
} 

您當前的實現是正確的,但不是高性能:

  • 你通過複製傳遞你的字典(所以你每次重新創建它)。
  • 您使用線性搜索,而容器提供更好的複雜性。 (std::unordered_set::findstd::unordered_set::count)。

最後注意,如果你想檢索所有無效的單詞,你可以看看std::set_difference(要求有單詞和字典排序)。

+0

這是一個優雅的代碼片段。非常感謝 – Yang