为具有1和2字节字符的字符集实现退格

时间:2011-10-28 18:02:43

标签: c++ c algorithm

字符集包含1和2个字节的字符。一个字节字符的第一位为0。你刚才 继续在缓冲区中累积字符。假设在某个时刻用户键入退格,如何 你能否有效地删除角色。

在我看来,一个解决方案是没有必要考虑一个字节字符(它有0作为最高有效位)并且只需要考虑2个字节字符以及它如何与1个字节区分开来我认为要包含和额外的位(比如说0)到2字节的字符来区分它,但这会占用很多字符表示。

提出一个想法!

3 个答案:

答案 0 :(得分:1)

你是什么意思第一位?
在2个八位字节值0xfade 0b1111101011011110 )中,第一位是0还是1

无论如何,您可以安排以little-endian或big-endian格式写入值,以使“first bit”始终写在最后。通过仅检查写入的最后一个八位字节,您知道是否删除1或2个八位字节。

答案 1 :(得分:0)

听起来有点像家庭作业,但是......

如果你在缓冲区中累积它们,那么“退格”只意味着将写指针向后移动到缓冲区中(并且可能在新的写入头处写入NUL)。一个非常简单的实现是:

On backspace:
  Move write pointer back one byte
  If MSB != 0:
    Move write pointer back one byte
  Write NUL at current position

这是你在找什么?

答案 2 :(得分:0)

不要组成​​自己的字符集或编码;使用UTF-8。然后很容易在写指针之前找到字符的开头(它是最近的八位字节,其两个最高位不是0x10)。记住,然后字符可以更长而不是两个八位字节,但这仍然是必要的;有超过65,792个字符。