zawdee 2022-06-14 21:50 采纳率: 100%
浏览 80
已结题

简易文本编辑系统的设计与实现

英文小说存于一个文本文件中。
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数和出现的位置(输出行号,或高亮显示);
(3)删除某一子串,并将后面的字符前移。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出“全部字母数”、“数字个数”、“空格个数”、“文章总字数”;
(3)删除某一字符串后的文章写入文件中。
(4)希望能用C语言按上面要求运行出来
急用,抱拳谢谢!

  • 写回答

3条回答 默认 最新

  • qfl_sdu 2022-06-14 22:20
    关注

    之前写的:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    #define N 200
    
    //查找big中出现smal的次数
    void findstr(char* big, char* smal, int pos[], int* nmb)
    {
        int i, j, lenb, lens;
        lenb = strlen(big);
        lens = strlen(smal);
        *nmb = 0;
        if (lens > lenb)
            return;
    
        i = 0;
        while (i < lenb - lens + 1)
        {
            for (j = 0; j < lens; j++)
            {
                if (tolower(big[i + j]) != tolower(smal[j])) //不区分大小写,如果区分大小写,则去掉tolower
                    break;
            }
            if (j == lens) //说明找到
            {
                pos[*nmb] = i;
                (*nmb)++;
                i += lens;
            }
            else
                i++;
        }
    }
    
    int main()
    {
        int row = 0;//文本实际的行数
        FILE* fp;   //文件指针
        char buf[N][100] = { 0 }; //缓存每行文本数据,每行最多100个字节
    
        int nmbZm = 0, nmbSz = 0, nmbSpace = 0, total = 0;//字母数、数字数、空格数、总字符数
    
        int times = 0; //某个单词出现的次数
        int pos[N]={0};    //记录单词出现的位置
        int pos_nmb = 0;
        char smal[20] = { 0 };//需要查找的字符串
    
        int i, j, tmp = 0;//临时变量
        char hc[100] = { 0 };//临时变量--删除字符串时使用
    
        if (!(fp = fopen("a.txt", "r")))
        {
            printf("文件打开失败\n");
            return 0;
        }
        printf("开始读文件...\n");
        while (!feof(fp))
        {
            memset(buf[row], 0, 100);
            fgets(buf[row], 100, fp);//逐行读取文件
            row++;
        }
        fclose(fp);
    
        //1.统计英文字母、数字、空格、总文本长度
        for (i = 0; i < row; i++)
        {
            total += strlen(buf[i]);
            for (j = 0; j < strlen(buf[i]); j++)
            {
                if ((buf[i][j] >= 'a' && buf[i][j] <= 'z') || (buf[i][j] >= 'A' && buf[i][j] <= 'Z'))
                    nmbZm++;
                else if (buf[i][j] >= '0' && buf[i][j] <= '9')
                    nmbSz++;
                else if (buf[i][j] == ' ')
                    nmbSpace++;
            }
        }
    
        printf("字母的个数:%d\n", nmbZm);
        printf("数字的个数:%d\n", nmbSz);
        printf("空格的个数:%d\n", nmbSpace);
        printf("文本总字符数:%d\n", total);
    
        //2.查询某个字符出现的次数
        printf("请输入要查找的字符串:");
        scanf("%s", smal);
        for (i = 0; i < row; i++)
        {
            findstr(buf[i], smal, pos, &tmp);
            if (tmp)
            {
                pos[pos_nmb++] = i + 1;//记录行号
            }
        }
        printf("%s出现的行号:",smal);
        for (i = 0; i < pos_nmb; i++)
            printf("%d ", pos[i]);
        printf("\n");
    
        //3.删除某个字符串(删除所有行中出现的字符串),并写入文件
        if (!(fp = fopen("a.txt", "w")))
        {
            printf("文件打开失败\n");
            return 0;
        }
        memset(smal, 0, 20);
        printf("请输入需要删除的字符串:");
        scanf("%s", smal);
        for (i = 0; i < row; i++)
        {
            findstr(buf[i], smal, pos, &tmp);
            tmp--;
            while (tmp >= 0)
            {
                memcpy(buf[i] + pos[tmp], buf[i] + pos[tmp] + strlen(smal), strlen(buf[i]) - strlen(smal) - pos[tmp]);
                tmp--;
                buf[i][strlen(buf[i]) - strlen(smal)] = '\0';
            }
            //
            fputs(buf[i], fp);
        }
        fclose(fp);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 修改了问题 6月14日
  • 创建了问题 6月14日

悬赏问题

  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢