2014-09-26 2 views
-2

Я не могу понять, почему мой поисковый код не будет работать в хеш-таблице. Я уже пробовал вставлять 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

'f (myNode == name) {': type 'myNode' является' struct node * '. Тип 'name' -' char * '. – BLUEPIXY

+0

Огромное спасибо :) –

ответ

2

имени является char* указателем. myNode - это указатель struct node*.

Они не могут быть равны , что означает, имеют один и тот же адрес памяти.

myNode == name всегда будет ложным.

Если вы хотите сравнить контент, указанный указателями, вы можете использовать функцию string.h strcmp(). См.: http://www.cplusplus.com/reference/cstring/strcmp/

Но убедитесь, что оба указателя указывают на фактическую строку (с нулевым завершением). Это нормально для name, но, вероятно, не относительно myNode.

+0

Большое спасибо Cyan. Понял! и это сработало !!! :) –

+0

@ gaily: привычка проверять ответ (флажок слева), когда вы чувствуете, что он отвечает на ваш вопрос. – Hughenot

Смежные вопросы