用c语言从city.txt文件中读十个城市名字,要求: (1) 自定义一个排序函数sorted( ),在主程序中调用该自定义函数,对所读取的10个城市进行升序排序,并把结果输出在屏幕上。
时间: 2024-03-08 17:51:04 浏览: 18
好的,那我来为你写一个C语言的程序,实现从文件中读取城市名字并排序的功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CITY_LEN 100 // 城市名字的最大长度
#define NUM_CITY 10 // 城市名字的数量
void my_sort(char cities[][MAX_CITY_LEN], int n);
int main()
{
char cities[NUM_CITY][MAX_CITY_LEN];
FILE *fp;
int i;
// 从文件中读取城市名字
fp = fopen("city.txt", "r");
if (fp == NULL) {
printf("Cannot open file.\n");
exit(1);
}
for (i = 0; i < NUM_CITY; i++) {
fgets(cities[i], MAX_CITY_LEN, fp);
cities[i][strlen(cities[i]) - 1] = '\0'; // 去掉换行符
}
fclose(fp);
// 对城市名字进行排序
my_sort(cities, NUM_CITY);
// 输出排序结果
for (i = 0; i < NUM_CITY; i++) {
printf("%s\n", cities[i]);
}
return 0;
}
// 自定义排序函数
void my_sort(char cities[][MAX_CITY_LEN], int n)
{
int i, j;
char temp[MAX_CITY_LEN];
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (strcmp(cities[i], cities[j]) > 0) {
strcpy(temp, cities[i]);
strcpy(cities[i], cities[j]);
strcpy(cities[j], temp);
}
}
}
}
```
程序首先定义了一个常量`MAX_CITY_LEN`表示城市名字的最大长度,以及一个常量`NUM_CITY`表示要读取的城市名字的数量。接着定义了一个自定义的排序函数`my_sort()`,该函数使用了字符串比较函数`strcmp()`和字符串复制函数`strcpy()`,实现对城市名字的升序排序。在`main()`函数中,程序首先打开文件`city.txt`,读取城市名字并存储在数组`cities`中,然后调用自定义的排序函数进行排序,最后输出排序结果到屏幕上。
需要注意的是,在读取城市名字时,我们使用了`fgets()`函数,该函数可以读取一行字符串,但会保留换行符,因此需要手动去掉换行符。同时,为了方便排序,我们使用了二维字符数组`cities`,其中第一维表示城市的数量,第二维表示城市名字的长度。