其他典型算法之文本处理-专项训练浙江2022年选考专用(含答案)

文档属性

名称 其他典型算法之文本处理-专项训练浙江2022年选考专用(含答案)
格式 zip
文件大小 1.4MB
资源类型 教案
版本资源 浙教版(2019)
科目 信息技术(信息科技)
更新时间 2022-02-23 14:37:55

文档简介

其他典型算法之文本处理
【例1】 编写VB程序,实现如下功能:在文本框Text1中输入包含数字、字母的字符串,单击“统计”按钮Commandl,统计该字符串中数字字符的个数,并在标签Label1中输出结果。为实现上述功能,请在划线处填入合适代码或选项。
Private Sub Commandl_Click()
Dim s As String,c As String
Dim i As Integer,n As Integer,num As Integer
s= ①  '(填程序代码)
num=0
n=Len(s)
 ②  '(填字母:从下列A、B、C三个选项中选取一项)
 ③  '(填字母:从下列A、B、C三个选项中选取一项)
If c>= ″0″ And c<=″9″ Then
  num=num+1
End If
Next i
Labell.Caption=str(num)
End Sub
划线②、③的选项:
A.Do While i<=n
B.c=Mid(s,i,1)
C.For i=1 To n
【例2】.要求从原文本(均为ASCII字符)中删除指定的单词(完整的单词),并将处理后的文本重新输出。程序界面如图所示,在文本框Text1中输入原文本,在文本框Text2中输入需要删除的单词,单击“删除”按钮(Command1)后,在文本框Text3中输出处理后的结果。
实现上述功能的VB程序如下,但加框处有错,请更正。
Function delstr(s1 As String, s2 As String) As String
 Dim n1 As Integer, n2 As Integer, i As Integer,ch As String
n1 = Len(s1) : n2 = Len(s2) : i = 1
Do While i <= n1
 word = Mid(s1, i, n2)
 ch = Mid(s1, i + n2, 1)
 If i = 1 Then
   f = zm(ch)
 Else
   f = zm(Mid(s1, i - 1, 1))And zm(ch) '①
 End If
If word = s2 And Not f Then
   i = i +1 '②
 Else
   s = s + Mid(s1, i, 1)
   i = i + 1
 End If
Loop
delstr = s
End Function
Function zm(ch As String) As Boolean
If ch > ″a″ And ch <= ″z″ Or ch >= ″A″ And ch <= ″Z″ Then
zm = True
Else
zm = False
End If
End Function
Private Sub Command1_Click()
Dim t1 As String, t2 As String
 t1 = Text1.Text
 t2 = Text2.Text
 Text3.Text = delstr(t1, t2)
End Sub
课后训练
1.编写“单词查询”程序,实现如下功能:在文本框Text1中输入一段英文文本(以“.”为结束符),在文本框Text2输入一个英文字母,单击“获取单词”按钮Command1,在列表框List1依次显示Text1中包含该英文字母的所有单词。程序运行界面如图所示。
              
(1)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String,tmp As String,c As String
Dim n As Integer,i As Integer,flag As Boolean
Dim cnt As Integer '存储符合条件的单词数
s=Text1.Text:n=Len(s):flag=False:cnt=0
List1.Clear
For i=1 To n
c=Mid(s,i,1)
If c>=″a″ And c<=″z″ Or c>=″A″ And c<=″Z″ Then
 ① 
If c=Text2.Text Then flag=True:cnt=cnt+1
Else
If flag Then List1.AddItem tmp
tmp=″ ″
 ② 
End If
Next i
If cnt=0 Then
List1.AddItem ″找不到符合条件的单词.″
End If
End Sub
(2)若文本框Text2中输入“M”,单击“获取单词”按钮后,列表框List1中显示的单词个数是    。
2.RLE(Run-Length Encoding行程长度编码)压缩算法是Windows系统中使用的一种图像文件压缩方法,用两个数据表示,第一个记录指定像素重复的次数;第二个记录具体像素的值。例如,有一表示颜色像素值的字符串RRRRGGBBB,用RLE压缩方法压缩后可用4R2G3B表示。小芳设计了一个VB程序实现RLE算法功能。在Text1中输入原始数据,点击“压缩”按钮Command1后,在Text2中显示经过压缩后的数据。程序运行界面如下图所示。
(1)这里采用的压缩技术属于    (选填有损压缩/无损压缩)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码
Private Sub Command1_Click()
Dim s1 As String,s2 As String,c As Integer,p As Integer
s1=Text1.Text
s2=″ ″:c=1: ① 
Do While p<=Len(s1)
If Mid(s1,p,1)=Mid(s1,p-1,1) Then
c=c+1
Else
s2=s2+Str(c)+Mid(s1,p-1,1)
 ② 
End If
p=p+1
Loop
Text2.Text= ③ 
End Sub
3.通常加密算法中密钥中的字符不能有重复,现编写一VB程序,检查密匙是否有重复。单击“检验”按钮Command1,若出现的是互不重复的一串大写字母,则在列表框List1中输出“该字符串符合加密条件!”,反之,则在列表框List1中输出重复的字母及该字母第二次出现的位置。程序运行界面如图所示。
(1)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String,i As Integer,a(1 To 26) As Integer,r As String,j As Integer
Dim b(1 To 26) As String,c(1 To 100) As Integer
s=Text1.Text
List1.Clear
For i=1 To 26
a(i)=0
Next i
j=1
For i=1 To Len(s)
r=Mid(s,i,1)
 ① 
If a(Asc(r)-64)=2 Then
b(j)=r:c(j)=i:j=j+1
End If
Next i
If j=1 Then List1.AddItem ″该字符串符合加密条件!″
For i=1 To j-1
 ② 
Next i
End Sub
(2)由上述算法可知,在文本框Text1中输入字符串“INTEGER”,在列表框中输出的值为                 。
4.用VB编写一个字符串分行程序,功能如下:单击“分行”按钮Command1,将文本框Text1中的英文文本在列表框List1中分行显示(分行时单词不得跨行,每行字符尽可能多但不超过40个),并在标签Label1中输出总行数,运行效果如下图所示。分行算法如下:
(1)将文本框中的字符串保存到变量s中;
(2)当s中字符个数超过40时,循环执行下列①②③步,否则跳转到(3):
①如果第41个字符不是英文字母,则分行位置p=40;否则,向左逐个查找,直至找到第一个非英文字母,将其位置作为分行位置p;
②截取s的前p个字符,作为新增行显示在列表框List1中,同时总行数加1;
③将s中未分行部分重新赋值给变量s。
(3)将s作为新增行显示在列表框List1中,同时总行数加1。
实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
 Dim s As String, c As String
 Dim r As Integer, total As Integer, p As Integer
 total= 0
 s =① 
 Do While Len(s)> 40
r = 41
c = Mid(s,r,1)
If Not((c > = ″a″And c < = ″z″)Or (c>=″A″And c<=″Z″)) Then
 p = 40
Else
'从第41个字符开始向左找到第1个非英文字母,并将其位置值赋给p
Do While (c >=″a″And c<=″z″)Or (c>=″A″And c<=″Z″)
r=② 
c=Mid(s,r,1)
 Loop
 p=r
End If
List1.AddItem Mid(s,1,p)
total=total+1
 s=③ 
Loop
List1.AddItem s
total=total+1
Label1.Caption=″共″+Str(total)+″行″
End Sub
在程序①、②、③划线处,填入适当的语句或表达式,把程序补充完整。
5.小明编写某VB程序,其功能如下:文本框Text1里输入数学表达式(假设表达式的长度小于等于100),在列表框List1里输出所有配对括号在表达式中的位置。例如在文本框Text1里入:“12 (3-(1+2)) 3”,程序运行效果如图所示。
实现上述功能的VB代码如下,在划线的地方填入合适代码,完善程序。
Private Sub Command1_Click()
Dim s As String,i As Integer,top As Integer,a(1 To 100) As Integer
s=Text1.Text:i=1:top=0
Do While i<=Len(s)
If Mid(s,i,1)=″(″ Then
top=top+1
 ① 
End If
If Mid(s,i,1)=″)″ Then
List1.AddItem Str(a(top))+″ ″+Str(i)
 ② 
End If
i=i+1
Loop
End Sub
6.小明编写一个VB程序其功能为:在英文句子(以“.”结束)中查找包含指定字符串的单词,运行界面如图所示。文本框Text1为英文句子,文本框Text2中输入包含字符串,单击“运行”按钮Command1后,List1中显示符合条件的单词。实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim k As Integer,b As Integer,h As Integer,c As String,key as String
Dim w(1 To 1000) As String
s=Text1.Text:n=Len(s):key=Text2.Text
j=0:k=1:b=1:i=1:h=0
Do While i<=n
c=Mid(s,i,1)
If Not (c>=″a″ And c<=″z″ Or c>=″A″ And c<=″Z″) Then
If j<>0 Then
w(b)=Mid(s,k,j) '①
k=k+1:j=0
End If
b=i+1
Else
j=j+1
End If
i=i+1
Loop
For i=1 To k-1
h=0
For j=1 To Len(w(i))-len(key)+1
If key=w (i) Then h=h+1 '②
Next j
If h<>0 Then List1.AddItem w(i)
Next i
End Sub其他典型算法之文本处理
【例1】 编写VB程序,实现如下功能:在文本框Text1中输入包含数字、字母的字符串,单击“统计”按钮Commandl,统计该字符串中数字字符的个数,并在标签Label1中输出结果。为实现上述功能,请在划线处填入合适代码或选项。
Private Sub Commandl_Click()
Dim s As String,c As String
Dim i As Integer,n As Integer,num As Integer
s= ①  '(填程序代码)
num=0
n=Len(s)
 ②  '(填字母:从下列A、B、C三个选项中选取一项)
 ③  '(填字母:从下列A、B、C三个选项中选取一项)
If c>= ″0″ And c<=″9″ Then
  num=num+1
End If
Next i
Labell.Caption=str(num)
End Sub
划线②、③的选项:
A.Do While i<=n
B.c=Mid(s,i,1)
C.For i=1 To n
答案:①Text1.Text ②C ③B
解析:这是一个关于文本统计的题型,这类题型通常先是从文本框中获取待处理的字符串存入变量,然后通过循环,每次用Mid函数提取1个(或若干个)字符,对字符进行分析统计。循环次数一般是字符串的个数。因此,①处是要从文本框中获取待处理的字符串,并将其存入变量,填Text1.Text。②处设置循环,循环次数一般是字符串的个数,可填For i=1 To n或For i=1 To len(Text1.Text)。根据语句“If c>=″0″ And c<=″9″ Then”判断,变量c存的是一个字符,因此③处需从s中提取1个字符。
【例2】.要求从原文本(均为ASCII字符)中删除指定的单词(完整的单词),并将处理后的文本重新输出。程序界面如图所示,在文本框Text1中输入原文本,在文本框Text2中输入需要删除的单词,单击“删除”按钮(Command1)后,在文本框Text3中输出处理后的结果。
实现上述功能的VB程序如下,但加框处有错,请更正。
Function delstr(s1 As String, s2 As String) As String
 Dim n1 As Integer, n2 As Integer, i As Integer,ch As String
n1 = Len(s1) : n2 = Len(s2) : i = 1
Do While i <= n1
 word = Mid(s1, i, n2)
 ch = Mid(s1, i + n2, 1)
 If i = 1 Then
   f = zm(ch)
 Else
   f = zm(Mid(s1, i - 1, 1))And zm(ch) '①
 End If
If word = s2 And Not f Then
   i = i +1 '②
 Else
   s = s + Mid(s1, i, 1)
   i = i + 1
 End If
Loop
delstr = s
End Function
Function zm(ch As String) As Boolean
If ch > ″a″ And ch <= ″z″ Or ch >= ″A″ And ch <= ″Z″ Then
zm = True
Else
zm = False
End If
End Function
Private Sub Command1_Click()
Dim t1 As String, t2 As String
 t1 = Text1.Text
 t2 = Text2.Text
 Text3.Text = delstr(t1, t2)
End Sub
答案: ①f =zm(Mid(s1, i - 1, 1)) Or zm(ch) ②i = i + n2
解析: 程序中变量word存放位置i开始的一个单词,ch存放单词word后的一个字符。①处是判断单词word左右是否为字母,只要左右有一个是字母,则f=true。比如当i=8,word=″tea″,但其右边是字母″c″,说明这个“tea”只是单词“teacher”中的一部分,不能删除,得f=true。②处所在的if语句功能为判断是否要删除单词,如果满足条件word = s2 And Not f,表明i位置开始的单词word就是要删除的单词s2,且该词左右都不是字母,则删除。否则不删除,把i位置的字母存入s,位置i的值加1指向下一个字母。所以②处应填i = i + n2,表示略过n2个字母。
课后训练
1.编写“单词查询”程序,实现如下功能:在文本框Text1中输入一段英文文本(以“.”为结束符),在文本框Text2输入一个英文字母,单击“获取单词”按钮Command1,在列表框List1依次显示Text1中包含该英文字母的所有单词。程序运行界面如图所示。
              
(1)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String,tmp As String,c As String
Dim n As Integer,i As Integer,flag As Boolean
Dim cnt As Integer '存储符合条件的单词数
s=Text1.Text:n=Len(s):flag=False:cnt=0
List1.Clear
For i=1 To n
c=Mid(s,i,1)
If c>=″a″ And c<=″z″ Or c>=″A″ And c<=″Z″ Then
 ① 
If c=Text2.Text Then flag=True:cnt=cnt+1
Else
If flag Then List1.AddItem tmp
tmp=″ ″
 ② 
End If
Next i
If cnt=0 Then
List1.AddItem ″找不到符合条件的单词.″
End If
End Sub
(2)若文本框Text2中输入“M”,单击“获取单词”按钮后,列表框List1中显示的单词个数是    。
答案 (1)①tmp=tmp+c ②flag=False (2)1
解析 该算法查找的方法是:每次循环,从文本中取出一个字符c,若是字母,存入变量tmp,如果字符c等于要查找的字母,则flag=True,表示当前单词含有要查找的字母,同时cnt的值加1,变量cnt存放含有要查找的字母的单词的数量。如果字符c不是字母,说明当前单词结束,此时判断flag的值,如果flag=True,则输出当前单词。接下来要取出下一个单词,需把变量tmp设为空值,flag设为False。
2.RLE(Run-Length Encoding行程长度编码)压缩算法是Windows系统中使用的一种图像文件压缩方法,用两个数据表示,第一个记录指定像素重复的次数;第二个记录具体像素的值。例如,有一表示颜色像素值的字符串RRRRGGBBB,用RLE压缩方法压缩后可用4R2G3B表示。小芳设计了一个VB程序实现RLE算法功能。在Text1中输入原始数据,点击“压缩”按钮Command1后,在Text2中显示经过压缩后的数据。程序运行界面如下图所示。
(1)这里采用的压缩技术属于    (选填有损压缩/无损压缩)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码
Private Sub Command1_Click()
Dim s1 As String,s2 As String,c As Integer,p As Integer
s1=Text1.Text
s2=″ ″:c=1: ① 
Do While p<=Len(s1)
If Mid(s1,p,1)=Mid(s1,p-1,1) Then
c=c+1
Else
s2=s2+Str(c)+Mid(s1,p-1,1)
 ② 
End If
p=p+1
Loop
Text2.Text= ③ 
End Sub
答案 ①p=2 ②c=1 ③s2+Str(c)+Mid(s1,p-1,1)或s2+Str(c)+Mid(s1,len(s1),1)
解析 程序中变量p指示取字符的位置,循环中比较的两个字符位置是p和p-1,说明p的初值应该是2,所以①处填p=2。本程序压缩的具体算法是:比较p和p-1位置中的两个字符,若相等,则c加1,若不等,则把之前统计的相同字符数c和字符存入变量s2,同时c重新赋值为1,所以②处填c=1。循环结束后,最后一串相同字符的信息未存入变量s2,所以③处填s2+Str(c)+Mid(s1,p-1,1)或s2+Str(c)+Mid(s1,len(s1),1)。
3.通常加密算法中密钥中的字符不能有重复,现编写一VB程序,检查密匙是否有重复。单击“检验”按钮Command1,若出现的是互不重复的一串大写字母,则在列表框List1中输出“该字符串符合加密条件!”,反之,则在列表框List1中输出重复的字母及该字母第二次出现的位置。程序运行界面如图所示。
(1)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String,i As Integer,a(1 To 26) As Integer,r As String,j As Integer
Dim b(1 To 26) As String,c(1 To 100) As Integer
s=Text1.Text
List1.Clear
For i=1 To 26
a(i)=0
Next i
j=1
For i=1 To Len(s)
r=Mid(s,i,1)
 ① 
If a(Asc(r)-64)=2 Then
b(j)=r:c(j)=i:j=j+1
End If
Next i
If j=1 Then List1.AddItem ″该字符串符合加密条件!″
For i=1 To j-1
 ② 
Next i
End Sub
(2)由上述算法可知,在文本框Text1中输入字符串“INTEGER”,在列表框中输出的值为                 。
答案 ①a(Asc(r)-64)=a(Asc(r)-64)+1 ②List1.additem b(i)+″ ″+Str(c(i))
解析 程序中涉及3个数组,数组a存放各字母出现的次数,数组b存放第二次出现的字母,数组c存放字母第二次出现时的位置。本题难点在于如何把字母转换为对应的编号x,并把字母出现的次数存入数组a对应的元素a(x)中。即:如果是″A″,对应编号是1,则a(1)=a(1)+1;如果是″B″,对应编号是2,则a(2)=a(2)+1;以此类推。计算编号的表达式是Asc(r)-64或Asc(r)-Asc(“A”)+1,若a(Asc(r)-64)=2,说明该字母出现了2次,此时记录字母到b(j),位置i存入c(j)。
4.用VB编写一个字符串分行程序,功能如下:单击“分行”按钮Command1,将文本框Text1中的英文文本在列表框List1中分行显示(分行时单词不得跨行,每行字符尽可能多但不超过40个),并在标签Label1中输出总行数,运行效果如下图所示。分行算法如下:
(1)将文本框中的字符串保存到变量s中;
(2)当s中字符个数超过40时,循环执行下列①②③步,否则跳转到(3):
①如果第41个字符不是英文字母,则分行位置p=40;否则,向左逐个查找,直至找到第一个非英文字母,将其位置作为分行位置p;
②截取s的前p个字符,作为新增行显示在列表框List1中,同时总行数加1;
③将s中未分行部分重新赋值给变量s。
(3)将s作为新增行显示在列表框List1中,同时总行数加1。
实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
 Dim s As String, c As String
 Dim r As Integer, total As Integer, p As Integer
 total= 0
 s =① 
 Do While Len(s)> 40
r = 41
c = Mid(s,r,1)
If Not((c > = ″a″And c < = ″z″)Or (c>=″A″And c<=″Z″)) Then
 p = 40
Else
'从第41个字符开始向左找到第1个非英文字母,并将其位置值赋给p
Do While (c >=″a″And c<=″z″)Or (c>=″A″And c<=″Z″)
r=② 
c=Mid(s,r,1)
 Loop
 p=r
End If
List1.AddItem Mid(s,1,p)
total=total+1
 s=③ 
Loop
List1.AddItem s
total=total+1
Label1.Caption=″共″+Str(total)+″行″
End Sub
在程序①、②、③划线处,填入适当的语句或表达式,把程序补充完整。
答案: ①Text1.Text ②r-1 ③Mid(s,p+1,Len(s)-p)或Mid(s,p+1)或Right(s,Len(s)-p)
解析: ①根据题目中自然语言的描述,本处是将文本框text1中输入的字符串保存到变量s中。
②变量r指示字符位置,从第41个字符开始向左找到第1个非英文字母,r每次循环递减1。
将s中未分行部分重新赋值给变量s。
5.小明编写某VB程序,其功能如下:文本框Text1里输入数学表达式(假设表达式的长度小于等于100),在列表框List1里输出所有配对括号在表达式中的位置。例如在文本框Text1里入:“12 (3-(1+2)) 3”,程序运行效果如图所示。
实现上述功能的VB代码如下,在划线的地方填入合适代码,完善程序。
Private Sub Command1_Click()
Dim s As String,i As Integer,top As Integer,a(1 To 100) As Integer
s=Text1.Text:i=1:top=0
Do While i<=Len(s)
If Mid(s,i,1)=″(″ Then
top=top+1
 ① 
End If
If Mid(s,i,1)=″)″ Then
List1.AddItem Str(a(top))+″ ″+Str(i)
 ② 
End If
i=i+1
Loop
End Sub
答案 ①a(top)=i ②top=top-1
解析 程序中,数组a存放左括号出现的位置,变量top存放数组a中未匹配的左括号数量。如果表达式第i个字符是″(″,则top=top+1,并把位置i存入a(top)中。如果表达式第i个字符是″)″,则与位置是a(top)的左括号匹配,此时top的值减1。
6.小明编写一个VB程序其功能为:在英文句子(以“.”结束)中查找包含指定字符串的单词,运行界面如图所示。文本框Text1为英文句子,文本框Text2中输入包含字符串,单击“运行”按钮Command1后,List1中显示符合条件的单词。实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim k As Integer,b As Integer,h As Integer,c As String,key as String
Dim w(1 To 1000) As String
s=Text1.Text:n=Len(s):key=Text2.Text
j=0:k=1:b=1:i=1:h=0
Do While i<=n
c=Mid(s,i,1)
If Not (c>=″a″ And c<=″z″ Or c>=″A″ And c<=″Z″) Then
If j<>0 Then
w(b)=Mid(s,k,j) '①
k=k+1:j=0
End If
b=i+1
Else
j=j+1
End If
i=i+1
Loop
For i=1 To k-1
h=0
For j=1 To Len(w(i))-len(key)+1
If key=w (i) Then h=h+1 '②
Next j
If h<>0 Then List1.AddItem w(i)
Next i
End Sub
答案 ①w(k)=Mid(s,b,j) ②Mid(w(i),j,Len(key))
解析 程序中,数组w保存每个单词,变量b记录单词的开始位置,j记录单词中字母的个数,k记录已保存的单词数。程序中的do while循环部分功能是把原文s中的单词取出来,存储到w数组中。具体实现方法是每次循环取一字符c,若是字母,说明当前单词尚未结束,字母个数j加1,若不是字母,表明当前单词结束,则把单词存入w(b)中,所以①处填w(k)=Mid(s,b,j),同时k加1,j重置为0,b赋值为i+1,即为下一个单词的开始位置。
②处所在的二重循环,其功能是从每个单词里去找是否包含Text2中的字符串。检索方法是从单词w(i)中取len(key)个字符,第1次从第1位开始取,如果和key相等,则h加1;第2次从第2位开始取len(key)个字符,如果和key相等,则h加1,如此循环。那么当循环结束后,如果h>0,表明w(i)中含有查找单词,显示出来。
同课章节目录