int addWord(pTrieNode pHead,const char *szWord) { pTrieNode pCur = pHead; int nWordLen = strlen(szWord); for(int i = 0; i < nWordLen; i++) { //字母匹配 if(pCur->next[szWord[i]-'a'] != NULL && pCur->next[szWord[i]-'a']->cData == szWord[i]) { pCur = pCur->next[szWord[i]-'a']; continue; } //字母不匹配,则添加一个字母节点 else { pTrieNode pNode = (pTrieNode)malloc(sizeof(TrieNode)); //新建一个节点 initTrieNode(pNode,szWord[i]); //赋值 pCur->next[szWord[i]-'a'] = pNode; pCur = pNode; } } pCur->bIsWord = true; pCur->count++; return 0; }
tnp addString(Trie t, char* rem){ while((*rem)!='\0'){ int ei=(*rem)-'a'; if(t->edges[ei]) t=t->edges[ei]; else{ tnp ntn=initTrieNode(); t->edges[ei]=ntn; t=ntn; } rem++; } return t; }
int _tmain(int argc, _TCHAR* argv[]) { pTrieNode pMyTrie = (pTrieNode)malloc(sizeof(TrieNode)); initTrieNode(pMyTrie); //读取单词文本 FILE *fWords = fopen("words.txt","r"); if(fWords == NULL) return 0; char szBuf[MAX_WORD_LEN] = {0}; while(fgets(szBuf,MAX_WORD_LEN,fWords) != NULL) //会读入换行符。。。 { szBuf[strlen(szBuf)-1] = '\0'; addWord(pMyTrie,szBuf); memset(szBuf,0,MAX_WORD_LEN); } fclose(fWords); //查找 findWord(pMyTrie,"gram",true); return 0; }
Trie initTrie(){ tnp x; x=initTrieNode(); return x; }