2010-02-05 31 views
3

我不得不用寫一個程序來檢查一個字符串是否是一個有效的字。有沒有我可以使用的字典庫?如果沒有,我怎麼能構建一個查詢字典?C++中的字典庫

謝謝!

+1

你的意思是你需要一個有效的詞典(如牛津英語詞典)和支持代碼,你可以用它來編寫一個程序來檢查有效的單詞嗎? – 2010-02-05 23:11:46

回答

8
struct Dictionary { 
    Dictionary() { 
    // load _words, here's one possible implementation: 
    std::ifstream input ("/usr/share/dict/words"); 
    for (std::string line; getline(input, line);) { 
     _words.insert(line); 
    } 
    } 
    bool contains(std::string const& word) const { return _words.count(word); } 

    std::set<std::string> _words; 
}; 
+0

如果你有一個現代的C++編譯器或訪問Boost,那麼使用std :: tr1 :: unordered_set比std :: set會更快。 – Manuel 2010-02-06 07:01:01

+2

@曼努埃爾:不一定,但即使是這樣,也沒有理由相信這對他很重要。保留自動排序的std :: set是有好處的,因爲你可以使用lower/upper_bound。謹防過早優化並聲明「更快」,而不需要1)要求或2)速度測試。 – 2010-02-06 14:51:13

+0

@Roger:我做了一些測試來支持我的觀點。對於包含58000個字的字典,查找單個字需要的平均時間爲0.6微秒,tr1 :: unordered_set爲0.8微秒,std :: set爲0.8微秒。以下是您感興趣的代碼:http://pastie.org/812479。所以是的,我想這畢竟沒有太大的區別。 – Manuel 2010-02-06 16:41:39

2

如果你有一個文件中的單詞列表,你可以加載它們在一個std:map並使用find方法。

+1

一個std :: set或std :: tr1 :: unordered_set就足夠了。 – Manuel 2010-02-06 07:01:52

4

嘗試使用STL setmap來存儲您的單詞。至於獲得單詞列表,谷歌可能可以幫助你。