这是一道面试题。您将使用什么数据结构来存储文本编辑器中的文本?
在老式的 ZX-Spectrum 上,一个(或多个,我不知道)文本编辑器使用了非常简单的结构。
有一个很大的缓冲区,占用了所有空闲 RAM。文本在光标处分成两部分。光标之前的部分放置在缓冲区的开头,其余部分放置在缓冲区的末尾。当输入文本时,数据只是添加到第一部分的末尾,当光标移动时,文本会被来回复制。
缓冲区布局:
Hello, World!
^------Cursor here
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|H|e|l|l|o|,| |W| <free> |o|r|l|d|!|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ^ ^ |
begin cur1 cur2 end
这就是一些编辑操作的完成方式:
Type a char: buffer[cur1++] = character
Backspace: cur1--
Cursor left: buffer[--cur2] = buffer[--cur1]
Cursor right: buffer[cur1++] = buffer[cur2++]
缓冲器的作用:
Hello, W..............orld!
Press right ^ ^
Hello, Wo..............rld!
Press backspace ^ ^
Hello, W...............rld!
Press 0 ^ ^
Hello, W0..............rld!
^ ^
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)