[英]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.