题目描述:
某公司为了更高效的编写代码,邀请你开发一款代码编辑器程序。?
程序的输入为已有的代码文本和指令序列,程序需输出编辑后的最终文本。
指针初始位置位于文本的开头。支持的指令(X为大于等于0的整数,word 为无空格的字符串):
FORWARD X 指针向前(右)移动X,如果指针移动位置超过了文本末尾,则将指针移动到文本未尾?
BACKWARD X 指针向后(左)移动X,如果指针移动位置超过了文本开头,则将指针移动到文本开头?
SEARCH-FORWARD word 从指针当前位置向前查找 word 并将指针移动到word的起始位置,如果未找到则保持不变?
SEARCH-BACKWARD word 在文本中向后查找 word 并将指针移动到word的起始位置,如果未找到则保持不变INSERT word 在指针当前位置前插入word,并将指针移动到word的结尾?
REPLACE word 在指针当前位置替换并插入字符(删除原有字符,并增加新的字符)?
DELETE X 在指针位置删除X个字符
输入描述:?
输入的第一行为命令列表的长度K
输入的第二行为文件中的原始文本接下来的K行,每行为一个指令
输出描述:?
编辑后的最终结果?补充说明:?
文本最长长度不超过 256K
示例1
输入:?
1
ello
INSERT h?
输出:?
hello?
说明:在文本开头插入示例2?
输入:
2?
hllo?
FORWARD 1?
INSERT e
输出:?
hello?
说明: 在文本的第一个位置插入
示例3?
输入:
2?
hell?
FORWARD 1000?
INSERT o?
输出:?
hello?
说明: 在文本的结尾插入示例4?
输入:
1?
hello?
REPLACE HELLO?
输出:?
HELLO?
说明:替换
示例5?
输入:
1
hello
REPLACE HELLO WORLD
输出:?
HELLO WORLD?
说明: 超过文本长度替换
示例6输入:
2?
hell?
FORWARD 100000?
REPLACE o?
输出:?
hello?
说明: 超出文本长度替换
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
# -*- coding: utf-8 -*-
'''
@File : 2023-B-代码编辑器.py
@Time : 2023/12/23 20:52:31
@Author : mgc
@Version : 1.0
@Desc : None
'''
class CodeEditor:
def __init__(self, text):
self.text = text
self.cursor = 0 # 初始化游标位置为文本开头
def process_commands(self, commands):
for command in commands:
self.execute_command(command)
return self.text
def execute_command(self, command):
parts = command.split()
cmd = parts[0]
if cmd == "FORWARD":
self.cursor += int(parts[1])
self.cursor = min(self.cursor, len(self.text)) # 不超过文本末尾
elif cmd == "BACKWARD":
self.cursor -= int(parts[1])
self.cursor = max(self.cursor, 0) # 不超过文本开头
elif cmd == "SEARCH-FORWARD":
index = self.text.find(parts[1], self.cursor)
if index != -1:
self.cursor = index
elif cmd == "SEARCH-BACKWARD":
index = self.text.rfind(parts[1], 0, self.cursor)
if index != -1:
self.cursor = index
elif cmd == "INSERT":
word = parts[1]
self.text = self.text[:self.cursor] + word + self.text[self.cursor:]
self.cursor += len(word) # 移动指针到插入词的结尾
elif cmd == "REPLACE":
word = parts[1]
self.text = self.text[:self.cursor] + word + self.text[self.cursor + len(word):]
# elif cmd == "REPLACE":
# word = parts[1]
# if ((self.cursor + len(word)) > len(self.text)):
# self.text = self.text[:self.cursor] + word
# else:
# self.text = self.text[:self.cursor] + word + self.text[self.cursor + len(word):]
# self.cursor += len(word)
elif cmd == "DELETE":
x = int(parts[1])
self.text = self.text[:self.cursor] + self.text[self.cursor + x:]
# 使用示例
if __name__ == "__main__":
# 读取输入
k = int(input()) # 命令列表的长度
original_text = input() # 原始文本
commands = [input() for _ in range(k)] # 接下来的K行,每行为一个指令
# 创建编辑器实例并处理命令
editor = CodeEditor(original_text)
result_text = editor.process_commands(commands)
# 输出编辑后的文本
print(result_text)