繁体   English   中英

结构行为

[英]Struct behaviour

困惑于为什么我的结构的哈希表表现如何。

我的结构:

typedef struct words {
    const char *word;
    int hitCount;
} words;

我从文档中获取一个单词并生成哈希值,使用线性探测进行冲突。 如果找到相同的单词我hitCount ++ else我找到空格并覆盖表中的空结构。

这是我的方法:

void add (char *inputWord, int index, int tableLength) {
    while (hashTable[index].word != "0") {
        if (strcmp(hashTable[index].word, inputWord) == 0) {
            hashTable[index].hitCount++;
            break;
        } else {
            index = ++index % tableLength;
        }
    }
    if (hashTable[index].word == "0") {
        hashTable[index].word = inputWord;
        hashTable[index].hitCount++;
    }
}

到目前为止,我已经用一个简单的.txt测试了它,其中包含15x“test”和3x“hello”:

Test Test Test
Test Test Test
Test Test Test
Test Test Test
Test Test Test
Hello Hello Hello

它输出以下内容:

hello:15
hello:3

而不是预期的:

test:15
hello:3

由于某种原因,我无法看到它覆盖保存在表格中相应位置的“测试”。

使用printf()表明,只要它添加了第一个“hello”,它就会擦除“test”,即使正确的索引被解析为add()并且它与“test”的索引不同。

我希望我已经包含了错误代码的来源,并且我已经提供了足够的信息。

谢谢!!

Ps :(所有不在字母表中的东西都被剥离,解决方案必须在C中)

您没有复制inputWord ,而是将指针存储到其包含的内存中。因此,当您扫描下一个单词时,内存会发生变化。 所有表条目最终都将指向同一个单词。

你需要做一个ht[index].word = strdup(inputWord); 或类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM