使用trie.c和trie.h打印string-tri

时间:2017-05-11 04:21:40

标签: c

这是我使用trie.c和trie.h创建的主文件。该程序的目的是存储字典文件中的单词。

var section = document.querySelector('section');
section.querySelectorAll('.foo').forEach(function(e) {
    console.log(e);
})

。 。 。 。

node* x = (node*)malloc(sizeof(node));
x = insert("bb", x);
x = insert("sdf", x);
x = insert("df", x);
x = insert("bbbb", x);
printAllWords(x);

。 。 。

我的输出是

        while (fgets(word, MAX_WORD, file) != NULL) {
            if (word[strlen(word)-1] == '\n') { // remove '/n' at the last 
                word[strlen(word)-1]='\0';
            }
            printf("print word : %s \n" , word);
            printf("length : %d \n" , (int) strlen(word));
            dictionary = insert(word, dictionary);
        }
        dictionary = insert("PLEASE", dictionary);
        dictionary = insert("zzz", dictionary);
        printAllWords(dictionary);

如您所见,我的插入方法适用于纯字符串,例如“zzz”,但我不知道为什么它不适用于从文件中提取的单词....你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

我猜你的node就像:

struct
{
    char *word;
    // Left and right pointers, etc
} node;

而且insert(char const *newWord)有:

thisNode->word = newWord;

如果按照指针分配,循环中的所有新单词都指向相同的内存地址。快速而肮脏的修复是:

struct
{
    char word[MAX_WORD_LENGTH];
    // Left and right pointers, etc
} node;

而且insert(char const *newWord)有:

strcpy(thisNode->word, newWord);

这会将每个单词存储在一个单独的缓冲区中。