簡體   English   中英

在 C 的結構中按字母順序排序

[英]Sorting alphabetically in a structure in C

我寫了一個結構,讓我可以掃描名字、姓氏、區號和電話號碼。

打印此列表時,我希望它按字母順序排列。 到目前為止,我只學會了用數字對 C 中的列表進行排序。 如果我想按電話號碼對列表進行排序,這就是我對列表進行排序的方式。

void el_insert(tparts partslist, tparts q){
     tparts p=partslist;
     while(p->next!=NULL && p->next->tel_nr<q->tel_nr) p=p->next;
     q->next=p->next; p->next=q;
return;
}

如果我不想按數字而是按字母對它進行排序,我將如何更改它? 我可以使用與此處類似的代碼還是需要不同的方法?

我使用第一個字符對字符串進行排序。 這是一個示例(我在其中硬編碼了數組長度):

#include <stdio.h>
#include <stdlib.h>

char get_first_char(char* string);
void swap(char **str1, char **str2);

int main() {
    char *arr[5] = {
        "beta",
        "alpha",
        "zeta",
        "eta",
        "sigma"
    };

    printf("Before order:\n");
    for (int i = 0; i < 5; i++) {
        printf("%d. %s\n", i, arr[i]);
    }
    
    for(int i = 0; i < 5; i++) {
        int min_id = i;
        for (int j = i + 1; j < 5; j ++)
            if (get_first_char(arr[j]) < get_first_char(arr[min_id])) {
                min_id = j;
            }
        swap(&arr[min_id], &arr[i]);
    }

    printf("After order:\n");
    for (int i = 0; i < 5; i++) {
        printf("%d. %s\n", i, arr[i]);
    }

    return 0;
}

void swap(char **str1, char **str2) {
    char *temp = *str1;
    *str1 = *str2;
    *str2 = temp;
}

char get_first_char(char* string) {
    return string[0];
}

Output:

Before order:
0. beta
1. alpha
2. zeta
3. eta
4. sigma
After order:
0. alpha
1. beta
2. eta
3. sigma
4. zeta

希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM