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