2017-05-11 14 views
-1

テキストファイルから読み込まれたいくつかのデータでリンクリストを作成し、ソートする必要があります。 私の構造:リンクリストを文字列比較でソートしようとしたときにエラーが発生しました

struct Person { 
int age; 
char *name; 
struct Person *next; 
}; 

typedef struct Person LIST; 

ファイルからの読み込み:この後

while (fgets(line, sizeof(line), fp)) { 
    LIST *node = (Person*)(malloc(sizeof(Person))); 
    node->name = strdup(line); 
    node->next = NULL; 

    if (head == NULL) { 
     current = head = node; 
    } 
    else { 
     current = current->next = node; 
    } 
} 
fclose(fp); 

私はちょうど罰金に見えるリンクリストをプリントアウトしています。

理想的には、年齢別にソートする必要がありますが、データを別々の変数に読み込むことに成功しませんでした。だから、私は文字列を比較してリストをソートしようとしました。それは 'nullptr'と言いますので、2つの条件を追加しました(current-> name [i]!= NULL)& &(current-> name [i + 1]!= NULL))を私の 'if'文に追加しましたただし、同じエラーが発生します。

for (int i = 0; i < 5; i++) 
{ 
    if ((current->name[i]!=NULL) && (current->name[i+1] != NULL) && ((current->name[i]) > (current->name[i + 1]))) 
    { 

     char temp = NULL; 
     current->name[i] = temp; 
     current->name[i] = current->name[i + 1]; 
     current->name[i + 1] = temp; 

    } 
} 
+0

あなたの名前の_letters_をソートしています –

+1

'current-> name'は文字配列です。 'current-> name [i]'は 'char'です。 –

+0

、なぜi <5?それはどこから来たのですか? –

答えて

0

あなたは年齢によってソートすることはできませんので、あなたは、年齢変数に年齢を読んだことがありません。名前でソートする場合は、strcmp(char *a, char *b)関数を使用します。この場合、< b、a == bまたはa> bであるかどうかによって-1,1、0,1が返されるため、条件式は

if ((current != NULL) && (current->next != NULL) && strcmp(current->name, current->next.name) > 0) 

この方法では、現在のノードと次のノードの実際の名前を比較し、同じ名前の文字は比較しません。

関連する問題