給定一個字節數組,其中字符可以是1個字節或2個字節長 對於1個字節的字符,最高有效位必須爲0.對於2個 字節字符,最高有效字節 的最高有效位必須是1,而最低有效字節 的最高有效位不關心(X)。您將得到 字節數組中字符的索引I。請注意,I-1或I + 1可以引導您成爲角色中的一個角色或 。給一個邏輯(不需要代碼)來刪除 我指向的那個字符的前一個字符。刪除字節數組中的前一個字符
回答
那麼,讓我們試試。我假設數組從index = 0開始,我們知道它的大小。如果不是,則更改下面代碼中的while循環來倒計時,並稍微擺動邏輯。
真正的問題不在於如何刪除以前的元素。它計算出給定的索引i是否是字符的開始(是1或2個字節)還是2個字節的中間。一旦我們知道了,刪除以前的元素是微不足道的,因爲找出前一個元素是1字節還是2字節是微不足道的。
所以,我認爲這應該工作,找出我是什麼指數。僞代碼:
if MSB_i == 0
{
if MSB_(i+1) == 1
-> Start of 2-byte char
else
-> Start of 1-byte char
} else
{
if MSB_(i+1) == 0
-> Middle of 2-byte char
else
{
j = i + 1
while (MSB_j == 1) AND (j != size)
j++
j = j - i
if j modulo 2 == 1
-> Start of 2-byte char
else
-> Middle of 2-byte char
}
很顯然,我還沒有實現,並檢查這一點,但它似乎是所有選項都包括在內。隨時糾正我或戳我,如果你想要一個書面解釋爲什麼這應該工作。
你有什麼關於Don'care condition.i認爲它可以是o或1.如果是這樣的話,那麼你的第一個案件不能保證是真實的.. – 2011-04-05 13:06:56
@prp第一種情況:MSB_i == 0,所以無論是1字節字符還是2字節字符的開始。爲了檢查,我們檢查下一個字節的MSB。如果它是0,那麼我指向的那個必須是一個1字節的字符。如果它是1,這意味着我指向的字節必須是2字節字符的開始。因此,我的第一個案例照顧不關心。 – Darhuuk 2011-04-05 13:48:58
對於任何元素array[i]
,你可以決定是否i
指向單字節字符,2字節字符的開始,或2字節字符的使用下面的測試中:
與開始array[i-1]
計算連續MSB == 1的數量。
如果array[i]
前面有1的奇數,那麼array[i]
是2字節數組的中間。
如果array[i]
由偶數數量的1前面,那麼如果MSB(array[i])
爲0,array[i]
是單字節字符,否則array[i]
是2字節字符的開始。
因爲我們正在努力只是array[i]
之前刪除字符,一旦你確定array[i]
爲起點或字符的中間,那麼你必須運行相同的測試array[i-x]
,其中x
爲1或2取決於array[i]
是分別指向字符的開頭還是中間。
編輯(當ARR [0]爲1字節,和ARR [1]是2字節,會發生什麼?):
首先,關於搜索連續1的更詳細的:當計數連續的1,如果我們到達數組[0]或MSB(數組[j])== 0,則循環停止。
odd=0
j = i
while(j && MSB(arr[j-1]))
j-=1
odd^=1 <<(binary XOR)
當循環完成時,奇數將爲1,如果有奇數個連續的1的和奇數將爲0,如果有0或偶數個連續的1的。
如果我們有與ARR [0] 1字節的字符和在ARR 2字節的字符數組[1],然後,據說,我只能具有值0,1,或2.
- i = 0:循環從不運行,因爲我== 0。我們認爲,因爲奇數== 0,所以前面的1的數字是EVEN。 arr [i]的MSB是0,所以arr [i]是1字節字符的開始。
- i = 1:因爲MSB(arr [i-1])爲0,所以循環從不運行。我們認爲存在EVEN連續1的數目,因爲奇數== 0。 arr [i]的MSB是1,因此arr [i]是一個2字節字符的開頭。
- i = 2:循環運行一次。我們發現一個ODD連續1的數字。因爲前面的1有一個奇數,所以arr [i]是2字節字符的中間值。
如果我們有一個數組,然後如何排列,那麼我的算法如何工作arr [0] = 1 byte arr [1] = 2 byte – 2011-04-05 13:08:44
@prp:我之前的描述不會測試i == 0或接近0。你倒計時了,你需要解釋這一點。我將編輯我的答案,爲您的示例提供解釋... – oosterwal 2011-04-05 13:22:05
在我看來,你們都有點困惑?
首先,什麼是「2字節字符的中間」?這可能是第一個人物的最後三分之一和第二個人物的前三分之一?不,它的廢話。一個2字節的字符有第一個和第二個字節,但沒有「中間」。
其次,由於沒有規定存儲最重要和最不重要的字節的順序,因此練習有點不確定。
但讓我們假設,LSByte存儲在較低的地址,那麼任務很簡單。只要檢查byte [i-1]的最高有效位,如果它被設置,則前一個字符是雙字節字符,否則是單字節。 (我們知道我說的是一個角色,而不僅僅是一個字節。)
確定無論您考慮的是正確的問題,但您的解決方案不正確..假設我們有arr [i] = 0和arr [i-1] = 1的MSB,那麼如果你想刪除前一個字符,那麼你必須移動i-2,因爲arr [i-1] = 1是當前字符並且你必須刪除前一個字符..你希望你明白... – 2011-04-05 13:48:38
不,在這兩種情況下,arr [i]的MS位是不相關的。在我的字符是單字節或我指向低字節(如果字節順序是低字節,高字節) – Ingo 2011-04-05 13:58:13
- 1. 刪除字節數組中的前16個字節
- 2. 從python中的字符串中刪除一組前綴字符
- 3. 如何從Java中的字節數組中刪除前4個字節?
- 4. 如何從一個字符數組中刪除前4個字符
- 5. 刪除字符數組中的字符
- 6. 在PHP中刪除一個字符串的前7個字符
- 7. 從字節數組中刪除第一個和最後一個字節?
- 8. 刪除4個字節的UTF8字符
- 9. 刪除一個PHP字符串中的一組特定字符
- 10. 刪除字符數組中的字母
- 11. 刪除字符數組的字符
- 12. 數組函數從數組中刪除第一個字符
- 13. 使用指針從字符數組[]中刪除/刪除字符
- 14. 從字節數組中刪除範圍
- 15. 如何從字符串數組中刪除前幾個項目?
- 16. 從char數組中刪除前兩個字符
- 17. 刪除一個字符串的字符
- 18. 刪除數據庫字段中的前3個字符
- 19. 刪除字符前的字符「。」
- 20. 從字節中刪除NUL字符
- 21. 如何刪除一切前的某個字符與字符分成組
- 22. swift:比較2個字符數組,從每個字符中刪除一個值
- 23. Python:從第一個數字字符中刪除字符串
- 24. 從二維數組中的字符串中刪除最後一個字符
- 25. 從Python中的數組中刪除一個字符串
- 26. 從一個或兩個數字中刪除一個字符串
- 27. vba - 從每個字符串數組中刪除子字符串
- 28. 刪除數組第一個索引的第一個字符?
- 29. 如何刪除字符串中的前10個字符?
- 30. 如何刪除字符串中的前10個字符?
所以你想讓我們爲你解決功課嗎?你試過什麼了?什麼沒有用?爲什麼它不工作? – Darhuuk 2011-04-05 11:35:02
@darhuuk在將任何問題標記爲家庭作業之前都會三思。這是一個討論論壇,而不是您的人員博客..瞭解它 – 2011-04-05 11:38:15
哦,我的天哪 - 這些沒有腦子的家庭作業在哪裏? – Ingo 2011-04-05 11:41:03