LZW编码是一种自适应词典编码,通过建立一个字典,实现字符的编码。假设输入的字符串中仅有小写字母和空格,编码方法如下:
1)初始时,建立一个空字典,把26个小写字母加入字典中。26个小写英文字母编码为1-26,字母“a”的编码为1,字母“b”的编码为2,其它字母的编码依次增加。
2)从字符串第一个位置开始扫描,若遇到空格(空格用“*”表示),则得到一个单词,截取该单词并存入变量中。
3)若该单词在字典中,则取出该单词在字典中的编码值;否则,依次取出该单词中各字母在字典中的编码值,(编码值之间用一个空格分隔),同时产生该单词的编码(编码为字典中的最大编码值加1),加入字典中。
4)继续扫描字符串,截取单词,并按照步骤(3)的方法进行处理,直至整个字符串编码完毕。字符串“abab”LZW编码过程如图所示。
(1)
如果字符串为“ab bb bb”,则其LZW编码为。
(2)
请在划线处填入合适的代码。
Dim
pos As Integer, a(1 To 100)As String
Private
Sub Form_Load( )
'将字母“a”至“z”依次存入数组元素a(1)到a(26)
End
Sub
Function
judge(ss As String) As Integer '判断字典中是否有ss这个单词
Dim i As Integer judge = 0
For i = 27 To pos
If a(i) =Then judge = i
Exit For
End If
Next i
End
Function
Private
Sub Command1_Click( )
Dim s As String, i As Integer, j As
Integer, k As Integer, ch As String, word As String, result As String, Dim id
As Integer, idletter As Integer
s = Text1.Text pos = 26: i = 1
Do While i <= Len(s)
j
= i
Do While Mid(s, j, 1) <> " " j
= j + 1
If j > Len(s) Then Exit Do
Loop
word = Mid(s, i, j - i)
If Len(word) = 1 Then '单个字母的单词
result = result + Str(Asc(word)
-Asc("a") + 1)
Else
id = judge(word)
If id = 0 Then '新的单词
For
k = 1 To Len(word) '依次处理该单词中的各个字母编码
ch
= Mid(word, k, 1)
Next
k
pos = pos + 1 '对该单词编码
a(pos) = word
Else '词典中存在该单词
result = result + Str(id) End
If
End If
If j < Len(s) Then result = result +
" *"
Loop
Text2.Text = result
End
Sub
答案: 【1】1 2 * 2 2 * 28
【1】ss【2】result=result+str(Asc(ch)-Asc(“a”)+1)或result=result+str(Asc(ch)-96)【3】i=j+1