diff --git a/Trie.cpp b/Trie.cpp index dacfbb8..c3e0acf 100644 --- a/Trie.cpp +++ b/Trie.cpp @@ -64,6 +64,24 @@ namespace CppJieba _display(_root, 0); } + bool Trie::find(const ChUnicode* chUniStr, size_t len) + { + TrieNode* p = _root; + for(size_t i = 0; i < len; i++) + { + ChUnicode chUni = chUniStr[i]; + if(p->hmap.find(chUni) == p->hmap.end()) + { + return false; + } + else + { + p = p->hmap[chUni]; + } + } + return p->isLeaf; + } + void Trie::_display(TrieNode* node, int level) { if(NULL == node) @@ -112,7 +130,6 @@ namespace CppJieba p->isLeaf = true; return true; } - } #ifdef TRIE_UT @@ -122,6 +139,10 @@ int main() Trie trie; trie.init("test/dict.txt"); trie.display(); + char * utf = "B"; + ChUnicode chUniStr[16]; + int uniLen = utf8ToUnicode(utf, sizeof(utf), chUniStr); + cout< hmap; //hmap[136]=1; return 0; diff --git a/Trie.h b/Trie.h index 2b7fe26..1253fc7 100644 --- a/Trie.h +++ b/Trie.h @@ -33,8 +33,9 @@ namespace CppJieba bool init(const char* const filepath = DICT_FILE_PATH); bool destroy(); void display(); - void _display(TrieNode* node, int level); + bool find(const ChUnicode* chUniStr, size_t len); private: + void _display(TrieNode* node, int level); bool _insert(const ChUnicode* chUniBuf, size_t len); }; }