怎么写这道c语言编程题啊?

图片说明

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

char content[1000][5000];
char filename[512];
int linecnt;

void display()
{
    int n;
    scanf("%d", &n);
    if (n > linecnt)
        printf("第%d行不存在!", n);
    else
        printf("%s", content[n - 1]);
}

void del()
{
    int n;
    scanf("%d", &n);
    if (n > linecnt)
        printf("第%d行不存在!", n);
    else
    {
        for (int i = n - 1; i < linecnt - 1; i++)
        {
            strcpy(content[i], content[i + 1]);
        }
        linecnt--;
    }
}

void cucd(int type)
{
    int n, m;
    scanf("%d %d", &n, &m);
    if (type == 2) m = m + 1;
    for (int i = linecnt; i > m - 1; i--)
    {
        strcpy(content[i], content[i - 1]);
    }
    if (n >= m) n = n + 1;
    strcpy(content[m - 1], content[n - 1]);
    linecnt++;
}

void save()
{
    FILE *fp;
    fp = fopen(filename, "w+");
    for (int i = 0; i < linecnt; i++)
        fputs(content[i], fp);
    fclose(fp);
}

void replace(char * src, char * find, char * replacewith, int start = 0, int n = -1)
{
    if (n == -1) n = strlen(src);
    int fn = strlen(find);
    if (fn < 1) return;
    if (start < 0) return;
    if (start + n > strlen(src)) return;
    if (strcmp(find, replacewith) == 0) return;

    char temp[5000];
    for (int i = 0; i < start; i++)
        temp[i] = src[i];
    int curr = start;
    for (int i = start; i <= start + n - fn; i++)
    {
        int found = 1;
        for (int j = 0; j < fn; j++)
        {
            if (src[i + j] != find[j]) { found = 0; break; }
        }
        if (found)
        {
            for (int j = 0; j < strlen(replacewith); j++)
            {
                temp[curr + j] = replacewith[j];
            }
            curr = curr + strlen(replacewith);
            i = i + fn - 1;
        }
        else
        {
            temp[curr] = src[i];
            curr++;
        }
    }
    for (int i = start + n - fn + 1; i < strlen(src); i++)
    {
        temp[curr++] = src[i];
    }
    temp[curr] = '\0';
    strcpy(src, temp);
}

void ra()
{
    char s1[100];
    char s2[100];
    scanf("%s %s", s1, s2);
    for (int i = 0; i < linecnt; i++)
        replace(content[i], s1, s2);
}

void r()
{
    int x;
    int y;
    int n;
    char s1[100];
    char s2[100];
    scanf("%d %d %d", &x, &y, &n);
    scanf("%s %s", s1, s2);
    replace(content[x - 1], s1, s2, y, n);
}

void dastr()
{
    char str[100];
    scanf("%s", str);
    for (int i = 0; i < linecnt; i++)
        replace(content[i], str, "");
}

void dstr()
{
    int x;
    int y;
    int n;
    char str[100];
    scanf("%d %d %d", &x, &y, &n);
    scanf("%s", str);
    replace(content[x - 1], str, "", y - 1, n);
}

void ins()
{
    int x;
    int y;
    char str[100];
    scanf("%d %d", &x, &y);
    scanf("%s", str);
    char temp[5000];
    int curr = 0;
    for (int i = 0; i < y - 1; i++)
        temp[curr++] = content[x - 1][i];
    for (int i = 0; i < strlen(str); i++)
        temp[curr++] = str[i];
    for (int i = y; i < strlen(content[x - 1]); i++)
        temp[curr++] = content[x - 1][i];
    temp[curr] = '\0';
    strcpy(content[x - 1], temp);
}

int main()
{
    int choice;
start:
    printf("文本编辑器\n1 新建文件\n2 编辑文件\n请选择:");
    scanf("%d", &choice);
    if (choice == 1)
        printf("请输入新文件的文件名:");
    else if (choice == 2)
        printf("请输入打开文件的文件名:");
    else
        goto start;
    scanf("%s", &filename[0]);
    FILE *file;
    if (choice == 1)
    {
        if (fopen(filename, "r") == NULL)
        {
            file = fopen(filename, "w");
            fclose(file);
        }
        else
        {
            fclose(file);
            printf("文件已经存在\n");
            goto start;
        }
    }
    else
    {
        if ((file = (fopen(filename, "r"))) != NULL)
        {
            linecnt = 0;
            while (1)
            {
                if (fgets(&content[linecnt++][0], 5000, file) == NULL) 
                    break;
            }
            fclose(file);
        }
        else
        {
            printf("文件不存在\n");
            goto start;
        }
    }
    char cmd[10];
    while (1)
    {
        printf("L n 显示第n行\n");
        printf("D n 删除第n行\n");
        printf("CU n m 将第n行复制到第m行上面\n");
        printf("CD n m 将第n行复制到第m行上面\n");
        printf("RA str1 str2 将文件中所有str1用str2替换\n");
        printf("R x y n str1 str2 将文件中第x行第y列开始的n个字符中的所有str1用str2替换\n");
        printf("I x y str 在第x行,第y列字符前插入str\n");
        printf("DAStr str 删除文件中的所有str\n");
        printf("DStr x y n str 删除文件中的第x行,第y列开始的n个字符中的所有str\n");
        printf("SAVE 保存退出\n");
        printf("EXIT 放弃修改直接退出\n");
        scanf("%s", cmd);
        if (strcmp("L", cmd) == 0)
        {
            display();
        }
        else if (strcmp("D", cmd) == 0)
        {
            del();
        }
        else if (strcmp("CU", cmd) == 0)
        {
            cucd(1);
        }
        else if (strcmp("CD", cmd) == 0)
        {
            cucd(2);
        }
        else if (strcmp("RA", cmd) == 0)
        {
            ra();
        }
        else if (strcmp("R", cmd) == 0)
        {
            r();
        }
        else if (strcmp("I", cmd) == 0)
        {
            ins();
        }
        else if (strcmp("DASTR", cmd) == 0)
        {
            dastr();
        }
        else if (strcmp("DSTR", cmd) == 0)
        {
            dstr();
        }
        else if (strcmp("SAVE", cmd) == 0)
        {
            save();
            break;
        }
        else if(strcmp("EXIT", cmd) == 0)
        {
            break;
        }
    }
    return 0;
}