c语言结构体:编写一个程序,输入N个用户的姓名和电话号码,按照用户姓名的词典顺序排列输出用户的姓名和电话号码。 【输入形式】 用户首先在第一行输入一个正整数,该正整数表示待排序的用户数目,然后在下面多行输入多个用户的信息,每行的输入格式为:姓名 电话。以回车结束每个用户的输入。 【输出形式】 程序输出排序后的结果。每行的输出结果格式也是: 姓名 电话。姓名和电话字段中间没有空格,要求用户姓名不能超过10个字符,超出10个字符时候只取前10个字符作为姓名。电话号码不能超过10位,超过10位时只按10位处
时间: 2024-02-15 19:03:15 浏览: 71
c语言第章结构体共用体和用户定义类型完美版资料.ppt
好的,这道题目我们可以使用结构体数组来存储用户的姓名和电话号码,然后使用标准库函数qsort对结构体数组进行排序,最后按照排序后的结果输出用户的姓名和电话号码。
以下是C语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 10000
#define MAX_NAME_LEN 11
#define MAX_PHONE_LEN 11
struct User {
char name[MAX_NAME_LEN];
char phone[MAX_PHONE_LEN];
};
// 比较函数,用于qsort排序
int cmp(const void *a, const void *b) {
struct User *u1 = (struct User *)a;
struct User *u2 = (struct User *)b;
return strcmp(u1->name, u2->name);
}
int main() {
int n, i;
struct User users[MAX_N];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %s", users[i].name, users[i].phone);
// 截取姓名前10个字符
users[i].name[MAX_NAME_LEN - 1] = '\0';
// 截取电话号码前10位
users[i].phone[MAX_PHONE_LEN - 1] = '\0';
}
// 使用qsort对结构体数组进行排序
qsort(users, n, sizeof(struct User), cmp);
// 输出排序后的结果
for (i = 0; i < n; i++) {
printf("%s %s\n", users[i].name, users[i].phone);
}
return 0;
}
```
注:该代码中使用了一个结构体数组来存储用户的姓名和电话号码,结构体中包含了两个字符数组,分别用于存储姓名和电话号码。在输入每个用户的信息时,使用scanf函数读入两个字符串,然后截取姓名前10个字符和电话号码前10位。最后使用标准库函数qsort对结构体数组进行排序,排序函数使用了一个比较函数cmp,用于按照姓名的词典顺序进行排序。最后按照排序后的结果输出用户的姓名和电话号码。
阅读全文