0
混淆了为什么我的哈希表结构表现得如此。结构行为
我的结构:
typedef struct words {
const char *word;
int hitCount;
} words;
我采取一个字从一个文档,并生成一个散列值,使用线性探测的碰撞。如果找到相同的单词我hitCount ++否则我找到空间并覆盖表中的空结构。
这里是我的方法来做到这一点:
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++;
}
}
到目前为止,我已经与包含15X “测试” 和3X “你好” 一个简单的.txt测试它:
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”,即使正确的索引正在被解析为add()并且它与“test”的不同,它也会擦除“测试”。
我希望我已经包含了不正确的代码的来源,我已经提供了足够的信息。
谢谢!
PS:(是不是在字母表一切都被剥离,解决方案必须在C)
那我该怎么办?我明白你的意思,但我的经验大部分是在java中,所以我的意思是将输入字符串存储在给定索引的结构中。 – macourtney7
使用strcpy()或类似的东西将内存复制到您的结构中,而不是像您当前正在执行的那样仅将指针存储到字符串中。 – John
'strdup',将分配空间,复制字符串并返回指向新副本的指针。当你完成这个任务时,一定要“释放”表中的所有“单词”。 – AShelly