写c语言代码,读取一组电话号码簿(由姓名和手机号码组成),将重复出现的项删除(姓名和电话号码都相同的项为重复项,只保留第一次出现的项),并对姓名相同手机号码不同的项进行如下整理:首次出现的项不作处理,第一次重复的姓名后面加英文下划线字符_和数字1,第二次重复的姓名后面加英文下划线字符_和数字2,依次类推。号码簿中姓名相同的项数最多不超过10个。最后对整理后的电话号码簿按照姓名进行从小到大排序,并输出排序后的电话号码簿。
时间: 2023-05-21 22:06:50 浏览: 64
下面是一个可能的解决方案,其中包含了排序算法。注意:代码可能存在漏洞或者可优化之处。
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_NAME_LENGTH 20
#define MAX_PHONE_LENGTH 15
#define MAX_ENTRIES 1000
/* 定义重复项的计数器 */
int counter[MAX_ENTRIES];
/* 定义电话号码的结构体 */
typedef struct {
char name[MAX_NAME_LENGTH];
char phone[MAX_PHONE_LENGTH];
} PhoneEntry;
/* 定义比较函数,用于排序 */
int cmp(const void *a, const void *b) {
return strcmp(((PhoneEntry*)a)->name, ((PhoneEntry*)b)->name);
}
int main() {
PhoneEntry entries[MAX_ENTRIES];
int n = 0;
/* 读取电话号码簿 */
while (scanf("%s %s", entries[n].name, entries[n].phone) == 2) {
n++;
}
/* 删除重复项并计数 */
for (int i = 0; i < n; i++) {
if (counter[i] > 0) {
continue; /* 如果已经被标记,直接跳过 */
}
for (int j = i + 1; j < n; j++) {
if (strcmp(entries[i].name, entries[j].name) == 0 &&
strcmp(entries[i].phone, entries[j].phone) == 0) {
counter[j] = 1; /* 标记为重复项 */
}
}
}
/* 整理重复项 */
for (int i = 0; i < n; i++) {
if (counter[i] == 0) {
continue; /* 如果不是重复项,直接跳过 */
}
int k = 1;
for (int j = i + 1; j < n; j++) {
if (strcmp(entries[i].name, entries[j].name) == 0) {
counter[j] = ++k; /* 记录出现次数 */
}
}
snprintf(entries[i].name + strlen(entries[i].name), MAX_NAME_LENGTH - strlen(entries[i].name), "_%d", k); /* 更改姓名 */
}
/* 排序并输出 */
qsort(entries, n, sizeof(PhoneEntry), cmp);
for (int i = 0; i < n; i++) {
printf("%s %s\n", entries[i].name, entries[i].phone);
}
return 0;
}
```
相关推荐
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)