【华为机试】2023年真题B卷(python)-代码编辑器

发布时间:2023年12月23日

一、题目

题目描述:

某公司为了更高效的编写代码,邀请你开发一款代码编辑器程序。?
程序的输入为已有的代码文本和指令序列,程序需输出编辑后的最终文本。
指针初始位置位于文本的开头。支持的指令(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)
文章来源:https://blog.csdn.net/u014481728/article/details/135174246
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。