2016-10-25 8 views
-1

Я пытаюсь реализовать линейную функцию поиска для строк в C, но в настоящее время она не работает. Вот мой код:Линейный поиск по LinkedList

// Linear search for name matching input string 

int listSearch(struct LinkedList* linkedList, char name) 
{ 
    struct StudentRecord* temp = linkedList->head; // Go to first item in linked list 
    int count = 0; // Count variable to give index of search item 

    while((temp != NULL) && (name != temp->name)) 
    { 
     temp = temp->next; 
     count++; 
    } 

    return count; 
} 

А вот вызов функции для listSearch:

printf("\nItem: Tim\nIndex: %d", listSearch(list_1, "Tim")); 

«Тим» является индексом 3, но вывод последовательно помещает его в индексе 4 (есть 4 общие элементы в списке и, следовательно, индекс 4 не существует) - и то же самое верно для любого элемента, который мы ищем. Это заставляет меня поверить, что условие (name! = Temp-> name) терпит неудачу, но я не могу для жизни меня понять, почему ... Может ли кто-нибудь дать мне подсказку о том, почему он не работает?

+0

Если это в C, не помечать вопрос C++ пожалуйста. – Rakete1111

+0

Право, это будет иметь в виду. Любое понимание того, что моя проблема здесь? –

+0

Вы автоматически пропускаете свою первую запись, когда назначаете 'temp'. ('temp = linkedList-> head;') – Jamie

ответ

0

Вы передаете символ, а не указатель на символ, и в результате вы сравниваете символ с указателем на строку. Вам также нужно сравнить строки.

int listSearch(struct LinkedList* linkedList, char * name) 
{ 
    struct StudentRecord* temp = linkedList; // Go to first item in  linked list 
    int count = 0; // Count variable to give index of search item 

    while(temp != NULL) { 
     if (temp->name != NULL && strcmp(name,temp->name)) { 
      count++; 
     } 
     temp = temp->next; 

    } 

    return count; 
} 
+0

Возможно, правильно, но откуда вы знаете, 'temp-> name' также не является' char'? – user4581301

+0

@ user4581301 Я этого не делаю. – Jamie

0

Использование strcmp для сравнения двух строк, например:

if(strcmp(a,b)==0) 
    printf("Entered strings are equal"); 
else 
    printf("Entered strings are not equal"); 
Смежные вопросы