2016-04-08 139 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

我编辑了我的答案给你更多的信息。 –

相关问题