C语言 对汉字按拼音进行排序

由于笔者最近要用C语言写一个简单(粗糙)的学生成绩管理系统,所以遇到一个问题:
需要按照学生的姓名将学生排序!
问题的难点是学生的名字是中文汉字的,该怎么比较大小呢?
经过一番度娘,笔者发现了一个神奇的strcoll函数:

函数声明:

1
int strcoll(const char *str1, const char *str2)

参数:

1
2
3
str1 -- 这是第一个要比较的字符串。

str2 -- 这是第二个进行比较的字符串。

返回值:

1
2
3
4
5
6
如果返回值<0,则表明str1小于str2(如 "李"(li)<"张"(zhang))

如果返回值,如果> 0,则表明str2 小于 str1

如果返回值= 0,则表明str1 等于str2 (在尝试的时候 笔者发现: 如果两个名字对应的拼音都一样,
但字不一样时返回值不为0,但除拼音外的判断条件笔者也没研究出来)

下面是一个应用的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
#include<string.h>
struct student{
char name[10];
} stu[42]; //声明结构体数组
int main(){
int n;
struct student s;
scanf("%d",&n);//判断人数
for (int i=1;i<=n;i++){
scanf("%s",stu[i].name);//从键盘读取学生名字
}
for (int i=1;i<=n-1;i++){
for(int j=1;j<=n-i;j++){
if(strcoll(stu[j].name,stu[j+1].name)>=0){ //按拼音从"a""z"排序
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
}
printf("\n\n");
for(int i=1;i<=n;i++){
printf("%s\n",stu[i].name);//输出
}
return 0;
}