利用指针数组对键盘输入的n个亚洲国家的英文名称,按英文首字母从小到大排序后输出。
时间: 2024-11-09 13:19:33 浏览: 9
第5讲 指针高级之指针数组-将若干字符串按字母顺序(由小到大)输出
要实现这个功能,你可以使用以下步骤:
1. 首先,创建一个字符串指针数组,用于存储亚洲国家的英文名称。
2. 接着,从用户那里获取输入的n个亚洲国家的英文名称并存储到指针数组中。
3. 使用`qsort`函数对指针数组进行排序,根据首字母的ASCII值进行升序排列。
4. 最后,遍历排序后的数组并打印每个国家的英文名称。
这里有一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 指针数组结构
typedef struct {
char *country;
int index; // 用于记录原始位置以便于还原排序后的顺序
} Country;
// 比较函数,根据首字母ASCII值进行升序排列
int compareCountries(const void *a, const void *b) {
Country *countryA = (Country *) a;
Country *countryB = (Country *) b;
return strcmp(countryA->country, countryB->country);
}
int main() {
int n;
printf("Enter the number of Asian countries: ");
scanf("%d", &n);
// 创建指针数组
Country *countries = malloc(n * sizeof(Country));
if (countries == NULL) {
perror("Memory allocation failed");
exit(1);
}
// 获取用户输入并存储
for (int i = 0; i < n; i++) {
printf("Enter English name of country %d: ", i + 1);
fgets(countries[i].country, sizeof(countries[i].country), stdin); // 注意去掉换行符
countries[i].country[strlen(countries[i].country) - 1] = '\0'; // 去掉fgets末尾的换行符
countries[i].index = i; // 记录原始索引
}
// 对指针数组进行排序
qsort(countries, n, sizeof(Country), compareCountries);
// 打印排序后的国家名
for (int i = 0; i < n; i++) {
printf("%s\n", countries[i].country);
}
// 释放内存
free(countries);
return 0;
}
```
阅读全文