由于笔者最近要用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
|
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; }
|