2016-04-08 12 views
-1
for (j = 1; j < x; j++) 
{ 
    for (n = 1; n < x; n++) 
    { 
     if (strcmp(info[n - 1].lname, info[n].lname) > 0) 
     { 
     strcpy(t, info[n - 1].lname); 
     strcpy(info[n - 1].lname, info[n].lname); 
     strcpy(info[n].lname, t); 
     } 
    } 
} 


for (j=0; j < x; j++) 
{ 
     printf("\n-------------------------------------------------------------------------\n"); 
     printf("ID number: %d", info[j].ID); 
     printf("\nName: %s %s", info[j].fname, info[j].lname); 
     printf("\nClass: %d%s", info[j].form, info[j].classname); 
     printf("\nSymptons: %s", info[j].symptom); 
     printf("\nPrescription: %s", info[j].symadmin); 
     printf("\n-------------------------------------------------------------------------\n"); 

} 

Guten Tag alles, ich habe versucht, dies für einige jetzt zu arbeiten. Ich möchte ein Array von String nach Nachnamen sortieren. Die Sache ist, der Nachname ist sortiert, aber die begleitenden Daten wie ID, fname, Klasse usw. sind nicht mit dem Nachnamen sortiert. nur der Nachname ändert die Position.So sortieren Sie eine Zeichenfolge in einem Array in C?

Wie kann ich das korrigieren? Vielen Dank im Voraus.

EDIT: Kann ich vielleicht die Implementierung, anstatt Worte sehen.

+0

Wenn Sie den Nachnamen ändern, müssen Sie auch andere Einträge in den entsprechenden Nachnamen ändern. – ameyCU

+0

@ameyCU Und wie mache ich das, Sir? – user4630535

+0

Wenn Sie Array in Ihren Strukturen und nicht Zeiger haben, dann können Sie Strukturvariable direkt zuweisen und sie austauschen _ (_ **, aber im Falle von Zeigern müssen Sie alle manuell tun ** _). – ameyCU

Antwort

1

Sie müssen die ganze struct tauschen:

if (strcmp(info[n - 1].lname, info[n].lname) > 0) 
{ 
    Patient t; 
    t = info[n - 1]; 
    info[n - 1] = info[n]; 
    info[n] = t; 
} 
0

, weil Sie nur den Nachnamen tauschen werden, ist. Sie müssen auch alles andere tauschen.

if (strcmp(info[n - 1].lname, info[n].lname) > 0) 
{ 
    //swap ID 
    int idTemp = info[n - 1].ID; 
    info[n - 1].ID = info[n].ID; 
    info[n].ID = idTemp; 

    //swap last name 
    strcpy(t, info[n - 1].lname); 
    strcpy(info[n - 1].lname, info[n].lname); 
    strcpy(info[n].lname, t); 

    //now swap first name 
    strcpy(t, info[n - 1].fname); 
    strcpy(info[n - 1].fname, info[n].fname); 
    strcpy(info[n].fname, t); 

    //now swap classname 
    strcpy(t, info[n - 1].classname); 
    strcpy(info[n - 1].classname, info[n].classname); 
    strcpy(info[n].classname, t); 

    //now swap symptom 
    strcpy(t, info[n - 1].symptom); 
    strcpy(info[n - 1].symptom, info[n].symptom); 
    strcpy(info[n].symptom, t); 

    //now swap sysadmin 
    strcpy(t, info[n - 1].symadmin); 
    strcpy(info[n - 1].symadmin, info[n].symadmin); 
    strcpy(info[n].symadmin, t); 
} 
+0

Ich verstehe, was Sie sagen, aber wenn ich versuche, es zu implementieren, erreiche ich immer noch nicht die gewünschte Ausgabe. Könnten Sie bitte ein Beispiel geben, was genau zu tun ist? Danke im Voraus. – user4630535

+0

Ich habe meine Antwort bearbeitet, um Ihnen weitere Informationen zu geben. –

Verwandte Themen