这是一个面试问题。您将使用什么数据结构来存储文本编辑器中的文本?
最佳答案
在优秀的旧 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!
^ ^
关于data-structures - 文本编辑器的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4199694/