本题需要模拟一个支持撤销和重做的文本编辑器。核心在于:只需要记录每一次真正改变文本的操作,并在撤销或重做时执行对应的反向操作或原操作。
维护三个结构:
text:当前文本内容,可以用字符数组或字符串模拟栈,方便在末尾插入和删除。undo:已经执行过、可以被撤销的操作记录。redo:已经被撤销、可以被重做的操作记录。本题目要求模拟一个带有历史回退功能的简易文本编辑器。编辑器内部维护一个初始为空的文本串,需要依次处理若干条命令。编辑器支持四类命令,它们的含义如下:
APPEND x:将字符串 x 直接连接在当前文本的末尾。x 是一个不含空白符的非空字符串,可以包含大小写字母、数字或其他符号。POP:移除当前文本末尾的 1 个字符。如果当前文本已经为空,则该命令什么都不做,并且不会被记入撤销或重做历史。UNDO:取消最近一次已经执行的 APPEND 或 POP,把文本恢复为执行该命令之前的内容。连续执行 UNDO 可以继续向前取消,直到没有可以取消的历史命令为止。REDO:重新执行最近一次被 UNDO 取消的命令,把文本恢复为撤销前的样子。连续执行 REDO 可以继续向后恢复,直到没有可以重做的命令为止。除上述基本行为外,历史记录遵循以下规则:当一个新的有效 APPEND 或 POP 命令执行后,当前所有可重做的命令记录都会被丢弃。也就是说,已经撤销但尚未重做的命令将不再可重做。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册