資源簡介 其他典型算法之文本處理【例1】 編寫VB程序,實現如下功能:在文本框Text1中輸入包含數字、字母的字符串,單擊“統計”按鈕Commandl,統計該字符串中數字字符的個數,并在標簽Label1中輸出結果。為實現上述功能,請在劃線處填入合適代碼或選項。Private Sub Commandl_Click()Dim s As String,c As StringDim i As Integer,n As Integer,num As Integers= ① '(填程序代碼) num=0n=Len(s) ② '(填字母:從下列A、B、C三個選項中選取一項) ③ '(填字母:從下列A、B、C三個選項中選取一項)If c>= ″0″ And c<=″9″ Then num=num+1End IfNext iLabell.Caption=str(num)End Sub劃線②、③的選項:A.Do While i<=nB.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 Stringn1 = Len(s1) : n2 = Len(s2) : i = 1Do 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 IfIf word = s2 And Not f Then i = i +1 '② Else s = s + Mid(s1, i, 1) i = i + 1 End IfLoopdelstr = sEnd FunctionFunction zm(ch As String) As BooleanIf ch > ″a″ And ch <= ″z″ Or ch >= ″A″ And ch <= ″Z″ Thenzm = TrueElsezm = FalseEnd IfEnd FunctionPrivate 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 StringDim n As Integer,i As Integer,flag As BooleanDim cnt As Integer '存儲符合條件的單詞數s=Text1.Text:n=Len(s):flag=False:cnt=0List1.ClearFor i=1 To nc=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+1ElseIf flag Then List1.AddItem tmptmp=″ ″ ② End IfNext iIf cnt=0 ThenList1.AddItem ″找不到符合條件的單詞.″End IfEnd 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 Integers1=Text1.Texts2=″ ″:c=1: ① Do While p<=Len(s1)If Mid(s1,p,1)=Mid(s1,p-1,1) Thenc=c+1Elses2=s2+Str(c)+Mid(s1,p-1,1) ② End Ifp=p+1LoopText2.Text= ③ End Sub3.通常加密算法中密鑰中的字符不能有重復,現編寫一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 IntegerDim b(1 To 26) As String,c(1 To 100) As Integers=Text1.TextList1.ClearFor i=1 To 26a(i)=0Next ij=1For i=1 To Len(s)r=Mid(s,i,1) ① If a(Asc(r)-64)=2 Thenb(j)=r:c(j)=i:j=j+1End IfNext iIf j=1 Then List1.AddItem ″該字符串符合加密條件!″For i=1 To j-1 ② Next iEnd 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)> 40r = 41c = Mid(s,r,1)If Not((c > = ″a″And c < = ″z″)Or (c>=″A″And c<=″Z″)) Then p = 40Else'從第41個字符開始向左找到第1個非英文字母,并將其位置值賦給pDo While (c >=″a″And c<=″z″)Or (c>=″A″And c<=″Z″)r=② c=Mid(s,r,1) Loop p=rEnd IfList1.AddItem Mid(s,1,p)total=total+1 s=③ LoopList1.AddItem stotal=total+1Label1.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 Integers=Text1.Text:i=1:top=0Do While i<=Len(s)If Mid(s,i,1)=″(″ Thentop=top+1 ① End IfIf Mid(s,i,1)=″)″ ThenList1.AddItem Str(a(top))+″ ″+Str(i) ② End Ifi=i+1LoopEnd Sub6.小明編寫一個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 StringDim w(1 To 1000) As Strings=Text1.Text:n=Len(s):key=Text2.Textj=0:k=1:b=1:i=1:h=0Do While i<=nc=Mid(s,i,1)If Not (c>=″a″ And c<=″z″ Or c>=″A″ And c<=″Z″) ThenIf j<>0 Thenw(b)=Mid(s,k,j) '①k=k+1:j=0End Ifb=i+1Elsej=j+1End Ifi=i+1LoopFor i=1 To k-1h=0For j=1 To Len(w(i))-len(key)+1If key=w (i) Then h=h+1 '②Next jIf h<>0 Then List1.AddItem w(i)Next iEnd Sub其他典型算法之文本處理【例1】 編寫VB程序,實現如下功能:在文本框Text1中輸入包含數字、字母的字符串,單擊“統計”按鈕Commandl,統計該字符串中數字字符的個數,并在標簽Label1中輸出結果。為實現上述功能,請在劃線處填入合適代碼或選項。Private Sub Commandl_Click()Dim s As String,c As StringDim i As Integer,n As Integer,num As Integers= ① '(填程序代碼) num=0n=Len(s) ② '(填字母:從下列A、B、C三個選項中選取一項) ③ '(填字母:從下列A、B、C三個選項中選取一項)If c>= ″0″ And c<=″9″ Then num=num+1End IfNext iLabell.Caption=str(num)End Sub劃線②、③的選項:A.Do While i<=nB.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 Stringn1 = Len(s1) : n2 = Len(s2) : i = 1Do 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 IfIf word = s2 And Not f Then i = i +1 '② Else s = s + Mid(s1, i, 1) i = i + 1 End IfLoopdelstr = sEnd FunctionFunction zm(ch As String) As BooleanIf ch > ″a″ And ch <= ″z″ Or ch >= ″A″ And ch <= ″Z″ Thenzm = TrueElsezm = FalseEnd IfEnd FunctionPrivate 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 StringDim n As Integer,i As Integer,flag As BooleanDim cnt As Integer '存儲符合條件的單詞數s=Text1.Text:n=Len(s):flag=False:cnt=0List1.ClearFor i=1 To nc=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+1ElseIf flag Then List1.AddItem tmptmp=″ ″ ② End IfNext iIf cnt=0 ThenList1.AddItem ″找不到符合條件的單詞.″End IfEnd 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 Integers1=Text1.Texts2=″ ″:c=1: ① Do While p<=Len(s1)If Mid(s1,p,1)=Mid(s1,p-1,1) Thenc=c+1Elses2=s2+Str(c)+Mid(s1,p-1,1) ② End Ifp=p+1LoopText2.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 IntegerDim b(1 To 26) As String,c(1 To 100) As Integers=Text1.TextList1.ClearFor i=1 To 26a(i)=0Next ij=1For i=1 To Len(s)r=Mid(s,i,1) ① If a(Asc(r)-64)=2 Thenb(j)=r:c(j)=i:j=j+1End IfNext iIf j=1 Then List1.AddItem ″該字符串符合加密條件!″For i=1 To j-1 ② Next iEnd 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)> 40r = 41c = Mid(s,r,1)If Not((c > = ″a″And c < = ″z″)Or (c>=″A″And c<=″Z″)) Then p = 40Else'從第41個字符開始向左找到第1個非英文字母,并將其位置值賦給pDo While (c >=″a″And c<=″z″)Or (c>=″A″And c<=″Z″)r=② c=Mid(s,r,1) Loop p=rEnd IfList1.AddItem Mid(s,1,p)total=total+1 s=③ LoopList1.AddItem stotal=total+1Label1.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 Integers=Text1.Text:i=1:top=0Do While i<=Len(s)If Mid(s,i,1)=″(″ Thentop=top+1 ① End IfIf Mid(s,i,1)=″)″ ThenList1.AddItem Str(a(top))+″ ″+Str(i) ② End Ifi=i+1LoopEnd 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 StringDim w(1 To 1000) As Strings=Text1.Text:n=Len(s):key=Text2.Textj=0:k=1:b=1:i=1:h=0Do While i<=nc=Mid(s,i,1)If Not (c>=″a″ And c<=″z″ Or c>=″A″ And c<=″Z″) ThenIf j<>0 Thenw(b)=Mid(s,k,j) '①k=k+1:j=0End Ifb=i+1Elsej=j+1End Ifi=i+1LoopFor i=1 To k-1h=0For j=1 To Len(w(i))-len(key)+1If key=w (i) Then h=h+1 '②Next jIf h<>0 Then List1.AddItem w(i)Next iEnd 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)中含有查找單詞,顯示出來。 展開更多...... 收起↑ 資源列表 其他典型算法之文本處理-專項訓練浙江2022屆選考專用(學生版).docx 其他典型算法之文本處理-專項訓練浙江2022屆選考專用(教師版).docx 縮略圖、資源來源于二一教育資源庫