DaiMaDaiMaDaiMaDaiMa 2020-01-09 14:31 采纳率: 100%
浏览 188
已采纳

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

图片说明

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-01-09 15:03
    关注
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题