1zhicaigou 2022-05-04 23:11 采纳率: 100%
浏览 90
已结题

文件 基础问题,求解答~

一个文本文件里存有多种花草树木的英文名称,一个一行,编写程序完成:
1、编写函数读取该文件内容
2、编写函数按英文字典顺序排序
3、编写查找函数,输入一种花木的英文名称,查找是否存在该表中。
这个问题的第一问我以解决,但是第二、第三问我不知道改怎么去写,怎么去对比文件内容,怎么去更改文件的内容呢?我们还没讲文件,这是预习的问题

img

  • 写回答

3条回答 默认 最新

  • qfl_sdu 2022-05-05 00:04
    关注

    写了一个例子,代码及测试结果如下:
    数据文件(data.txt,名字随便写的):

    rose
    abc
    test
    haha
    nono
    
    

    运行结果:

    img

    代码:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月13日
  • 已采纳回答 5月5日
  • 修改了问题 5月4日
  • 修改了问题 5月4日
  • 展开全部

悬赏问题

  • ¥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版?