文章目录
- 代码编辑器
代码编辑器
- 编辑器的输入为已有的代码文本和指令序列,程序需输出编辑后的最终文本,指针初始位置位于文本的开头;
- 支持的指令如下:
- 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个字符;
- x为大于等于0的整数,word为无空格的字符串;
输入描述:
第一行输入命令列表的长度k;
第二行为原始文本
后续的k行为命令
输出描述:
编辑后的最终文本
示例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 HELLOWORD
输出:
HELLOWORD
python实现
- 简单的字符串操作
k = int(input().strip())
cnt = input().strip()
cnt_len = len(cnt)
cur_ptr = 0cmd_list = []
for i in range(k):cmd_list.append(input().strip())for i in cmd_list:cmd, param = i.split()# 定位操作if cmd in ["FORWARD", "BACKWARD"]:x = int(param)if cmd == "FORWARD": # 向右移动cur_ptr += xcur_ptr = min(cur_ptr, cnt_len)else:# 向左移动cur_ptr -= xcur_ptr = max(0, cur_ptr)elif cmd in ["SEARCH-FORWARD", "SEARCH-BACKWARD"]:# 搜索并定位if cmd == "SEARCH-FORWARD": # 向右搜索r = cnt[cur_ptr:].find(param)if r != -1:cur_ptr += relse:# 向左搜索r = cnt[:cur_ptr].rfind(param)if r != -1:cur_ptr = relse:# 操作if cmd == "INSERT":cnt = cnt[:cur_ptr] + param + cnt[cur_ptr:]cur_ptr = cur_ptr + len(param) - 1elif cmd == "REPLACE":cnt = cnt[:cur_ptr] + param + cnt[cur_ptr+len(param):]elif cmd == "DELETE":x = int(param)cnt = cnt[:cur_ptr] + cnt[cur_ptr+x:]print(cnt)