我无法弄清楚为什么我的搜索代码无法在哈希表中运行。我已经尝试在每一行插入printf只是为了看代码的流程,它是正确的,但我仍然无法得到正确的输出。该程序按字母顺序保存哈希表上的单词,并使用链表。因此,如果我搜索以“A”开头的单词,则必须返回Key:1,依此类推。我很感激你能给予的任何帮助:)。
void searchInHash(int key, char *name) {
int hashIndex = key, flag = 0;
struct node *myNode;
myNode = hashTable[hashIndex].head;
if (!myNode) {
printf("Search element unavailable in hash table\n");
return;
}
while (myNode != NULL) {
if (myNode == name) {
printf("Key: %d\n", hashIndex);
flag = 1;
break;
}
myNode = myNode->next;
}
if (!flag)
printf("Search element unavailable in hash table\n");
return;
}
答案 0 :(得分:2)
name是char*
指针。
myNode是一个struct node*
指针。
他们不能 相等 ,这意味着,他们拥有相同的内存地址。
myNode == name
永远都是假的。
如果要比较指针指向的内容,可以使用string.h函数strcmp()
代替。请参阅:http://www.cplusplus.com/reference/cstring/strcmp/
但请确保两个指针都指向实际的字符串(null终止)。它对name
很好,但可能与myNode
无关。