用C语言输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。 输出格式: 按照年龄从大到小输出朋友的信息,格式同输出。 输入样例: 3 zhang 19850403 13912345678 wang 19821020 +86-0571-88018448 qian 19840619 13609876543
时间: 2024-01-24 17:19:15 浏览: 133
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Friend {
char name[11];
char birthday[9];
char phone[18];
int age;
};
int get_age(const char *birthday) {
int year, month, day;
sscanf(birthday, "%4d%2d%2d", &year, &month, &day);
int age = 2021 - year;
if (month > 6 || (month == 6 && day > 20)) {
age--;
}
return age;
}
int cmp(const void *a, const void *b) {
return ((struct Friend *)b)->age - ((struct Friend *)a)->age;
}
int main() {
int n;
scanf("%d", &n);
struct Friend *friends = (struct Friend *)malloc(sizeof(struct Friend) * n);
for (int i = 0; i < n; i++) {
scanf("%s %s %s", friends[i].name, friends[i].birthday, friends[i].phone);
friends[i].age = get_age(friends[i].birthday);
}
qsort(friends, n, sizeof(struct Friend), cmp);
for (int i = 0; i < n; i++) {
printf("%s %s %s\n", friends[i].name, friends[i].birthday, friends[i].phone);
}
free(friends);
return 0;
}
```
阅读全文