学习了字典序和字符串比较之后,今天让我们来给学生名单进行一下排序。我们知道计算理工学院的每个精英班有 10 名学生,老师会依次给出 10 名学生的名字(均为不含有空格的英文字符串)。你需要将这些名字按照字典序从小到大进行输出。
输入格式
测评机会反复运行你的程序。每次程序运行时,你的程序会被输入 10 行不含有空格的字符串,分别对应十个学生的姓名(字符串长度均大于 0 且小于 20)。
输出格式
输出为 10 行,为排序后的 10 个学生姓名,每个学生姓名单独占一行。
代码实现
#include <stdio.h>
#include <string.h>
char name[10][21] = {0};//定义一个10行21列的二维数组
char temp[21] = {0};//定义一个中间数组,在后面进行大小比较时用来交换值
int main() {
for (int i = 0; i < 10; i++) {
scanf("%s", *(name + i));//输入学生的名字
}
for (int i = 0; i < 10; i++) {
for (int j = i + 1; j < 10; j++) {
//比较前一个名字和后一个名字的大小,如果strcmp函数返回值大于0,说明前一个字母序大于后一个,则需要交换位置
if (strcmp(*(name + i), *(name + j)) > 0) {
strcpy(temp, *(name + i));//将前一个(大值),放到temp数组里
strcpy(*(name + i), *(name + j));//将后一个(小值),放到name数组的前一个的位置
strcpy(*(name + j), temp);//将temp中的大值,放到name数组的后一个位置
}
}
}
for (int i = 0; i < 10; i++) {
//此时的name数组已经按照有小到大的顺序排列好了,遍历出来即可
printf("%s\n", *(name + i));
}
return 0;
}