2016-10-25 7 views
-1

Cの文字列に対して線形検索機能を実装しようとしていますが、現在は機能していません。ここに私のコードは次のとおりです。4合計がある(LinkedListによる線形検索

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

「ティムインデックス3であるが、出力が一貫インデックス4で彼を置く:

// 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に関数呼び出しがありますリスト内のアイテム、したがってインデックス4は存在しません) - 検索するアイテムについても同様です。これは私に、(name!= temp-> name)の状態が失敗していると信じるようになりますが、私の人生の理由から見ることはできません...誰かが私になぜそれがうまくいかないのかのヒントを与えることができますか?

+0

それはCでなら、++あなたの質問Cをしてくださいタグ付けしないでください。 – Rakete1111

+0

右、そのことを念頭に置くでしょう。私の問題が何であるかについての洞察はありますか? –

+0

「temp」に割り当てたときに、最初のエントリを自動的にスキップします。 ( 'temp = linkedList-> head;') – Jamie

答えて

0

あなたは、charへのポインタではなくcharを渡しています。その結果、charと文字列ポインタを比較していました。また、文字列を比較する必要があります。例えば、2つの文字列を比較する

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"); 
関連する問題