[英]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.