Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
0
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;
}
Пример #4
0
Trie initTrie(){
    tnp x;
    x=initTrieNode();
    return x;
}