2401_89667839 2024-12-29 20:48 采纳率: 98.6%
浏览 12
已结题

C语言代码问题求解G3

Description
        阿美非常喜欢灵异类网络小说,经常需要在笔记本电脑上撰写网络小说。但很遗憾的是,阿美用的文字撰写软件中只有保存按钮,没有类似Word办公软件中的前进后退等功能。这就给阿美带来了较大的麻烦,于是找到阿亮求救,希望能够解决这个问题。阿亮听说后心里是那个美呀,平时阿美是那么的高冷,今天终于等到了亲密接触阿美的机会。
        阿美向阿亮描述了自己的文本编辑需求,希望阿亮能够完善该功能:(1)每点击1次保存,则将当前文本状态进行保存;(2)最多保存10个状态,如果再次保存第11个状态,则将第1个状态销毁,依次类推。。。;(3)点击back按钮,则从当前状态的文本内容返回到上一个状态的文本内容,若没有上一个文本状态,则返回当前状态文本;(4)点击forward按钮,则从当前状态的文本内容前进到下一个状态的文本内容,若当前处于最新状态,则返回当前状态文本。
Input
有多行文本执行命令:
EDIT 字符串:代表编辑一行新文本并保存。
FORWARD:代表前进到下一个文本状态。
BACK:代表回到上一个文本状态。
QUIT:表示输入数据结束
说明:每个状态的文本内容最多不超过10000个英文字符;当遇到回车既是点击保存按钮,最多50个状态。
第一行一定是一个以EDIT开始的命令行,且作为第一个状态,也就是没有空白状态。
Output
所有命令执行结束时,阿美编写的小说内容。
Sample Input
EDIT 50年前,长沙镖子岭。
EDIT 四个土夫子正蹲在一个土丘上,所有人都不说话,直勾勾地盯着地上那把洛阳铲。
EDIT 铲子头上带着刚从地下带出的旧土,离奇的是,这一坏土正不停地向外渗着鲜红的液体......
EDIT “这下子麻烦大喽。”老烟头把他的旱烟在地上敲了敲,接着道,“下面是个血尸嘎,弄不好我们这点儿当当,都要撂在下面噢。”
BACK
BACK
BACK
FORWARD
QUIT
Sample Output
50年前,长沙镖子岭。
四个土夫子正蹲在一个土丘上,所有人都不说话,直勾勾地盯着地上那把洛阳铲。

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-12-29 20:57
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    根据题目描述,我们需要实现一个简单的文本编辑器功能,支持保存多个状态,并能够前进后退。下面是一个详细的解决方案和对应的C语言代码实现。

    解决方案

    1. 定义数据结构:使用数组来存储每个状态的文本内容,同时维护两个指针currentlatest分别指向当前状态和最新状态。
    2. 处理EDIT命令:每次接收到EDIT命令时,将新的文本内容保存到数组中,并更新currentlatest指针。
    3. 处理BACK命令:如果当前不是第一个状态,则将current指针向前移动一位;否则保持不变。
    4. 处理FORWARD命令:如果当前不是最新状态,则将current指针向后移动一位;否则保持不变。
    5. 处理QUIT命令:输出当前状态的文本内容并结束程序。

    代码实现

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_STATES 10
    #define MAX_LENGTH 10000
    
    char states[MAX_STATES][MAX_LENGTH + 1];
    int current = 0;
    int latest = 0;
    
    void save_state(const char *text) {
        // 保存当前状态
        strcpy(states[latest % MAX_STATES], text);
        
        // 更新latest指针
        if (latest < MAX_STATES - 1) {
            latest++;
        } else {
            // 如果超过最大状态数,移除最旧的状态
            for (int i = 0; i < MAX_STATES - 1; i++) {
                strcpy(states[i], states[i + 1]);
            }
            latest = MAX_STATES - 1;
        }
        
        // 更新current指针
        current = latest;
    }
    
    void handle_edit(const char *text) {
        save_state(text);
    }
    
    void handle_back() {
        if (current > 0) {
            current--;
        }
    }
    
    void handle_forward() {
        if (current < latest) {
            current++;
        }
    }
    
    int main() {
        char command[10];
        char text[MAX_LENGTH + 1];
        
        while (scanf("%s", command) != EOF) {
            if (strcmp(command, "EDIT") == 0) {
                scanf(" %[^\n]", text); // 读取一行文本
                handle_edit(text);
            } else if (strcmp(command, "BACK") == 0) {
                handle_back();
            } else if (strcmp(command, "FORWARD") == 0) {
                handle_forward();
            } else if (strcmp(command, "QUIT") == 0) {
                printf("%s\n", states[current % MAX_STATES]);
                break;
            }
        }
        
        return 0;
    }
    

    代码说明

    1. 数据结构

      • states数组用于存储最多10个状态的文本内容。
      • currentlatest变量分别指向当前状态和最新状态。
    2. 函数

      • save_state:保存当前状态的文本内容,并更新latest指针。
      • handle_edit:处理EDIT命令,调用save_state保存新状态。
      • handle_back:处理BACK命令,更新current指针。
      • handle_forward:处理FORWARD命令,更新current指针。
    3. 主函数

      • 读取命令并根据命令类型调用相应的处理函数。
      • 当读取到QUIT命令时,输出当前状态的文本内容并结束程序。

    通过上述代码,可以实现阿美所需要的文本编辑器功能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月8日
  • 已采纳回答 12月31日
  • 创建了问题 12月29日