9. 行编辑(10分选做)
成绩 | 10 | 开启时间 | 2017年10月10日 星期二 18:00 |
折扣 | 0.8 | 折扣时间 | 2017年11月10日 星期五 23:55 |
允许迟交 | 否 | 关闭时间 | 2017年11月17日 星期五 23:55 |
背景:
早期的操作系统均是字符操作界面,那时只能采用简单的行编辑器进行文字处理,于是也只能使用行命令来编辑文本文件。
假设现在要开发一个字符界面的编辑器,对文本的编辑操作是通过输入一个一个的“行编辑命令”完成的。
系统约定:行编辑命令由“命令关键字 命令参数”组成。其中,命令关键字都是单一的字母,命令与参数之间使用一个空格进行分割,当命令参数为多个时采用“/”作为参数的分隔符,如果在命令的参数中间出现符号“/”,则用“\/”表示。我们将“\”定义为转义符。
现在,行编辑器具有如下编辑命令:
行插入:i #/串
在指定行号(>0)插入一个新行,新行的内容就是命令中给出的“串”。若插入的行超过了已有的行数,则在最后一行的后面插入一个新行。
文本替换:c 被替换串/替换串
将整个文本中全部[被替换串]替换为[替换串]。
行删除:d #
其中#为指定的行号
行合并:f #1/#2/#3...
将行号为 #2 和 #3...的行连接到行号为 #1 的行的后面,取消原来的 #2 行和#3等,合并后#2行和#3等原来的内容不存在了,被后面的行抵补替代。若指定行号超出正文的范围,则放弃操作。
输入:
假设,我们已经得到了一段文本,这段文本用[Text]......[/Text]的形式描述,之后是一串操作命令。
[Text]
1 222 33 44
2 333 45 d b g 3
3 444 56 333 54
[/Text]
c 333/zhang
d 1
i 1/This is a new line 1.
i 4/This is a new line 4.
f 3/4
i 100/new line.
以上命令的执行过程如下:
[Result:c 333/zhang]
1 222 33 44
2 zhang 45 d b g 3
3 444 56 zhang 54
[Result:d 1]
2 zhang 45 d b g 3
3 444 56 zhang 54
[Result:i 1/This is a new line 1.]
This is a new line 1.
2 zhang 45 d b g 3
3 444 56 zhang 54
[Result:i 4/This is a new line 4.]
This is a new line 1.
2 zhang 45 d b g 3
3 444 56 zhang 54
This is a new line 4.
[Result&#