如何在C中对数组中的字符串进行排序?

时间:2016-04-08 04:42:52

标签: c arrays sorting

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,类等附带的数据没有按姓氏排序。即只有姓氏改变位置。

我该如何纠正? 提前谢谢。

编辑:我可以看一下实现,而不是单词。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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);
}