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

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

之前写的:

#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;
}

你可以先试着做一做,试试,有问题再来提问

自己可搜索着写,百度参考