Description
现有结构体student,该结构体成员为int num,char name[10]。建立student型数组,数组元素个数和数据由用户输入。
Input
输入第一行为N,表示建立动态数组的元素个数;
输入第二行为第1个元素的数据(按照先num后name顺序输入);
输入第二行为第2个元素的数据(按照先num后name顺序输入);
......
输入第N+1行为第N个元素的数据(按照先num后name顺序输入);
Output
按照name从小到大进行数组的排序,并将排序后的数组输出(按照先num后name顺序输出)。
Sample Input
1 zhangsan
2 lisi
3 wangwu
Sample Output
2 lisi
3 wangwu
1 zhangsan
思路与前一题( Problem A: 学生年龄排序(难度2星)内大训练笔记)相同,只不过本题需要比较字母大小,这里我的水平不足,当第一个字母相同时需要比较后面的字母大小这种情况不会做(汗),侥幸过了。还请大佬们指点一二
上代码:
#include<iostream>
using namespace std;
struct student {
int num;
char name[10] = {};
};
void input(student[], const int);
void Sort(student[], const int);
void Output(student[], const int);
int main() {
student a[100];
int n;
cin >> n;
input(a, n);
Sort(a, n);
Output(a, n);
}
void input(student a[], const int n) {
int i = 0;
for (i; i < n; i++) {
cin >> a[i].num;
cin >> a[i].name;
}
}
void Sort(student a[], const int n) {
int i;
int j;
student temp;
for (i = 0; i < n; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (a[j].name[0]> a[j + 1].name[0]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
void Output(student a[], const int n) {
for (int i = 0; i < n; i++) {
cout <<a[i].num << " " <<a[i].name <<endl;
}
};