一个文本文件里存有多种花草树木的英文名称,一个一行,编写程序完成:
1、编写函数读取该文件内容
2、编写函数按英文字典顺序排序
3、编写查找函数,输入一种花木的英文名称,查找是否存在该表中。
这个问题的第一问我以解决,但是第二、第三问我不知道改怎么去写,怎么去对比文件内容,怎么去更改文件的内容呢?我们还没讲文件,这是预习的问题
文件 基础问题,求解答~
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- qfl_sdu 2022-05-05 00:04关注
写了一个例子,代码及测试结果如下:
数据文件(data.txt,名字随便写的):rose abc test haha nono
运行结果:
代码:
#include <stdio.h> #include <string.h> //定义花草树木的最多种类 #define MAXNMB 200 //读取文件,a返回所有花草树木的英文名称,长度限定为40,n返回读取的花草树木的个数 int readFile(const char* filename, char a[][40], int* n) { int i = 0; int len = 0; FILE* fp = fopen(filename, "r"); if (fp == 0) { printf("文件打开失败!\n"); return 0; } while (!feof(fp)) { fgets(a[i], 40, fp); //逐行读取文件 len = strlen(a[i]); if (len > 0) { if (a[i][len - 1] == '\n') //删除最后的回车符 a[i][len - 1] = 0; i++; } } *n = i; fclose(fp); return 1; } //排序 void sort(char a[][40], int n) { int i, j; char tmp[40]; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (strcmp(a[j], a[j + 1]) > 0) { strcpy(tmp, a[j]); strcpy(a[j], a[j + 1]); strcpy(a[j + 1], tmp); } } } } //查找 void find(char a[][40], int n, char* name) { int i = 0; for (; i < n; i++) { if (strcmp(a[i], name) == 0) { printf("%s在列表中\n",name); return; } } printf("%s不在列表中\n", name); } //显示数据 void show(char a[][40], int n) { for (int i = 0; i < n; i++) { printf("%s\n", a[i]); } } int main() { char a[MAXNMB][40]; int n = 0; char name[40] = { 0 }; if (readFile("data.txt", a, &n)) { printf("读取的文件内容:\n"); show(a, n); sort(a, n); //排序 printf("排序后的内容:\n"); show(a, n); printf("输入需要查找的花草树木名称:"); scanf("%s", name); find(a, n, name); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥15 STM32驱动继电器
- ¥15 Windows server update services
- ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
- ¥15 模糊pid与pid仿真结果几乎一样
- ¥15 java的GUI的运用
- ¥15 Web.config连不上数据库
- ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
- ¥15 怎么配置广告联盟瀑布流
- ¥15 Rstudio 保存代码闪退
- ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?