2011-10-28 24 views
2

字符集具有1和2字節字符。一個字節字符的第一位爲0。你只要 繼續積累在緩衝區中的字符。假設用戶在某個時候輸入退格,如何有效地移除角色。爲具有1和2字節字符的字符集執行退格

我想到的一個解決方案是,不需要考慮一個字節字符(它有0作爲最重要的位),只需要考慮2個字節的字符以及它如何與1區分開來我認爲包括和額外的位(比如0)到2字節的字符來區分它,但是會吃掉很多字符表示。

建議一個想法!

+2

這個問題可以處理,但我可以問你爲什麼使用兩個不同大小的字符?如果字符大小不同,則需要檢查一系列問題(例如緩衝區大小)。恕我直言,你應該考慮只是使所有字符2個字節,以簡化您的解決方案。 – dbeer

+0

這是一個現實生活中的問題還是隻是一個練習? – 2011-10-28 18:10:15

+0

首先這是一個練習..使所有字符2字節可能會浪費大量的內存! – pravs

回答

1

你是什麼意思的第一位?
在2個八位字節的值中0xfade0b1111101011011110)是第一位01

無論如何,您可以安排以little-endian或big-endian格式編寫值,以便始終將「第一位」寫入最後。通過僅檢查寫入的最後一個八位組,您知道是否刪除1或2個八位字節。

+0

第一位表示示例中的MSB及其中的1 – pravs

+0

確定...以little-endian格式寫入值。序列0x42 0x43 0xfa77將被寫爲0x42 0x43 0x77 0xfa。當你得到退格時,檢查寫入的最後一個值('0xfa')並刪除2個字節。 – pmg

0

聽起來有點像功課,但...

如果你在一個緩衝區積累他們,那麼,「退格」只是意味着在緩衝區中向後移動寫指針(也可能是寫在NUL新的寫頭)。一個非常簡單的實現是這樣的:

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

這是你在找什麼?

+0

該解決方案存在缺陷。假設最後一個字符是兩個字節,這個字符的第二個字節可以從零開始,但是你的算法只會將緩衝區遞減一個字節。 – 2011-10-28 18:14:45

+0

@ ricola86我的確想到了這一點,但我不確定是否給出了問題定義。他明確表示「一個字節的字符有0個MSB」。對我而言,這意味着「兩個字節的字符永遠不會有0作爲MSB」。在任何系統中,他都可以強制執行兩個字節字符,總是在第二個字節上設置MSB。但是,也許這是我的假設是有缺陷的。 –

+0

@ denniston.t:ricola86說得對,真正的問題是當這個2個字節的字符有1個MSB時 – pravs

0

不要組成你自己的字符集或編碼;使用UTF-8。然後很容易在寫入指針之前找到字符的開頭(它是兩個最高位不是0x10的最近的八位字節)。注意,那麼字符可以是較長的比兩個八位字節,但這是必要的;有超過65,792個字符。

相關問題