2016-04-08 200 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"); 

} 

美好的一天,我一直在試圖讓這個工作很長一段時間。我想按姓氏排序字符串數組。事情是,姓氏是排序的,但伴隨的數據,如ID,fname,類等不是用姓氏排序的。即只有姓氏改變位置。如何對C中數組中的字符串進行排序?

我該如何解決這個問題? 在此先感謝。

編輯:我可以看到實現,而不是單詞,也許。

+0

當您更改姓氏時,您還需要將其他條目更改爲相應的姓氏。 – ameyCU

+0

@ameyCU我該如何去做這個先生? – user4630535

+0

如果你的結構中有數組而不是指針,那麼你可以直接將結構變量賦值給另一個結構變量,並且交換它們(但是在指針的情況下,你需要手動執行所有的** _)。 – ameyCU

回答

1

您必須交換整個結構:

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

那是因爲你只是換姓。您還需要交換其他所有內容。

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

我明白你在說什麼,但是當我嘗試實現它時,我仍然沒有達到預期的輸出。你能舉個例子來說明做什麼嗎?提前致謝。 – user4630535

+0

我編輯了我的答案給你更多的信息。 –

相關問題