资源简介 第3节 字符串问题模拟演练1.编写VB程序代码,实现如下功能:在文本框Text1中输入金额(整数)后,点击“转换”按钮Command1,则在文本框Text2中显示该金额的大写,程序运行界面如下图所示:/(1)要使窗体标题上显示的文本改为“人民币大小写”,可在其属性窗口中将 属性的属性值改为“人民币大小写”。?(2)为了实现以上程序功能,使程序正常运行,请完善以下两处代码。Private Sub Command1_Click()Dim dx As String, dw As StringDim s As String, c As StringDim ch As String,i As Integerdx=“零壹贰叁肆伍陆柒捌玖拾”dw =“亿仟佰拾萬仟佰拾元” ① ?If Len(s) > 9 Then Label2.Caption=“输入的数据超出所能转换的范围”Else For i = 1 To Len(s) ch = Mid(s, i, 1) c = c + Mid(dx, Val(ch)+1,1)+ ② ?Next iLabel2.Caption = c +“整”End IfEnd Sub(3)由上述算法可知,若在文本框Text 1中输入“20”,则文本框Text3显示的结果为 。?答案 (1)Caption (2)①s=Text1.Text ②Mid(dw, 9 - Len(s) + i, 1) (3)贰拾零元整解析 本题考查字符串拼接。For 语句遍历数字字符串,字符变量c存放拼接字符。(1)略。(2)①输入字符串,存放到s中。②该累加部分由原值c+大写+单位构成,单位应该由金额位数映射到字符串dw,通过Mid获取。(3)略。2.实现如下程序:输入一个非负数,将该数各位上的数字反转得到一个新数。得到的新数,除了原数为0外,反转得到的新数最高位不应为0。程序运行时,在文本框Text1输入数字,单击按钮Command1后在文本框Text2上输出结果。程序界面如图所示。实现上述功能的VB程序如下,在划线处填入合适的代码。/Private Sub Command1_Click()Dim a As String, n As Integera = Text1.Text ① ?Do While n > 1 And Mid (a, n, 1) = “0” ② ?LoopFor i = n To 1 Step -1 Text2.Text = ③ ?Next iEnd Sub答案 ①n = Len(a) ②n=n-1 ③Text2.Text + Mid(a, i, 1)解析 本题考查数字反转,第一个Do While语句是尾部除零,接下来For语句是倒取数值。①分析Mid(a,n,1)=“0”得出n应为最后一个字符位置,也就是字符串长度。②Do While尾部除零,满足循环条件时,n左移1位。③现在n值表示为字符串最后非零位。因此只要把其从大到小遍历取出,新取的值位于原值右侧。3.趣味填空题:给出用等号连接的两个整数,如“222 = 24”,让你在左边的整数中间某个位置插入一个加号,看有没有可能让等式成立。以上面的式子为例,可以写成2+22=24和22+2=24两种答案。现设计一个程序,实现该算法,程序运行界面如图所示。/(1)标题要显示“趣味数学”,需修改窗体的 (选填:Caption、Name、Text)属性。?(2)实现上述功能的VB程序如下,请在程序划线处填入合适代码。Private Sub Command1_Click()Dim s As String, s1 As String, s2 As StringDim c As Integer, k As Integer, i As Integer, flag As Booleanflag = False: c = 0s = Text1.Text For i = 1 To Len(s) If Mid(s, i, 1) = “=”Then Exit ForNext i ① ?s2 = Mid(s,i+1,Len(s)- i)k = Len(s1)For i = 1 To k-1 If Val(Mid(s1, 1, i))+Val(Mid(s1, i + 1, k-i))=Val(s2) Then ② ? List1.AddItem “第”+Str (c)+“种答案:”+Mid(s, 1, i)+“+”+Mid(s, i + 1, Len (s)-i) flag = True End IfNext iIf ③ Then List1.AddItem “没有答案!”?End Sub答案 (1)Caption (2)①s1 = Mid(s, 1, i - 1) ②c=c+1③Not flag 或 flag=False解析 本题考查字符遍历截取。第一个For语句获取“=”位置,第二个For语句枚举遍历所有加法。(1)略。(2)①获取第一个数值,由变量i定位,通过Mid函数获得,存放到s1中。(2)②分析下方“第”+Str(c)+“种答案”可知,变量c作用是统计答案数。③由后面“没有答案”推导出,条件应为不满足,故flag=false。4.用VB编写一个“加减法运算”程序,实现如下功能:在文本框Text1中输入多个正整数加减算式(只包含数字和“+ ”“-”字符,以“=”为结束符),单击“计算”按钮Command1,计算结果在标签Label1上显示。程序运行界面如图所示。/(1)程序运行时清空Label1上的内容,则可在Form_Load事件过程中添加语句 (单选,填字母:A.Forml.Caption= “”/ B.Forml.Text=“”/C.Label1.Caption=“”/D.Label1.Text=“”)。?(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。Private Sub Command1_Click()Dim s As String, t As Integers = Text1.Textt = 0: p = 0: flag = 1For i = 1 To Len(s) ch = Mid(s, i, 1)If ch >=“0” And ch <= “9” Then p = ① ?Else t= ② ? p = 0 If ch = “-” Then flag = -1 Else If ch = “+” Then flag = 1 End If End IfNext iLabel1.Caption = Str(t)End Sub(3)若文本框Text1中输入内容的结束符“=”缺失(即输入内容为12+28-15+50),单击“计算”按钮后, 标签Label1上显示的内容是 。?答案 (1)C (2)①p*10 + Val(ch) ②t + flag*p (3)25解析 本题的解题关键在于理解非数字字符的操作。For语句遍历字符串值,If语句判断字符类型,对应操作。(1)略。(2)①分析判断条件可知,要执行数字相连。原值p乘10加新出现的值val(ch)组成新值。②随着非数字符号出现,要把前值放入累加器t中,flag存放前值符号,因此要累加flag*p。(3)略。5.情报员小王在工作时发现R国会用一些对称字符(如ABBA、ABA、123321)进行通信。R国为防止通信内容被破解,会在对称字符的头、尾加一些无关字符,如:12ABBA、ABAKK、5123432198。因此小王编写了一个VB程序,用于读取通信字符串中最长的对称字符。在文本框Text1中输入通信字符,单击“读取”按钮 Command1,在标签Label2中显示最长的对称字符,程序运行界面如图所示。请完善代码。/Private Sub Command1_Click()Dim x As String, n As Integer, i As IntegerDim k As Integer, start As IntegerDim max As Integerx = Text1.Text: n = Len(x)max = 0: start = 1For i = 1 To n k = n Do While k > i If ① And k - i + 1 > max Then? max = k - i + 1 start=i End If ② ? LoopNext iLabel2.Caption =“最长回文字符串为” + Mid(x, start, max)End SubFunction isPa(t As String) As Boolean ’判断是不是回文数Dim i As Integer ③ ?For i = 1 To Len(t) 2 If Mid(t, i, 1) <> Mid(t, Len(t) - i + 1, 1) Then isPa = FalseNext iEnd Function答案 ①isPa(Mid(x,i,k-i+1)) ②k=k-1 ③isPa = True解析 函数isPa(t)的功能是判断t是不是回文,根据函数返回值,很容易得出答案isPa=True。寻找最长回文字符的方法是这样的:先确定i=1,k=n,依次减小k的值来确定[1,k]之间的回文字符串;然后i=2,k=n,依次减小k的值来确定[2,k]之间的回文字符串……即在[i,k]之间依次寻找回文字符串,所以①的答案是isPa(Mid(x,i,k-i+1)),②的答案是k=k-1。可以从语句Label2.Caption=“最长回文字符串为”+Mid(x,star,max)中了解star、max变量的用途。6.输入一个表达式(运算符号只有加、减、乘、除和小括号,表达式是正确的,不需要检查),求表达式中最后一次计算的运算符号位置。比如表达式a*(b+c)-4+d最后一次运算的运算符号是在第10个位置的“+”,输出10。算法的思想是从表达式右边开始往左边查找,对碰到的字符分四种情况考虑:1)若是运算符“+”,保存该位置并结束查找。2)若是第一次碰到或“/”,保存该位置,若不是第一次碰到或“/”,继续往左边查找。3)若是“)”,调用函数找到和它对应的位置,跳过该括号内容,继续往左查找。4)若是非运算符,继续往左查找。运行界面如下图:/(1)表达式c*a+(a+b),最后一次计算的运算符号位置是 。?(2)实现上述功能的VB程序如下,根据算法将下列程序补充完整。Function find(y As String, x As Integer) As Integer’该函数的功能是返回表达式y中和位于第x位置的“)”配对的位置,代码略 Do While Mid(y, x, 1) <> “(” ① ? Loop find = x End Function Private Sub Command1_Click() Dim s As String, t As Integer, ans As Integer, p As Integer s = Text1.Text ’输入表达式 t = Len (s): p = 0 Do While t > 0 If Mid(s, t, 1) = “+” Or Mid(s,t, 1) = “-” Then ’处理+、- ans = t Exit Do End If If ② Then ’处理*、/? ans=t p=1 ’用来标记乘号或除号已经出现了 End If If Mid(s, t, 1) =“)”Then ’处理括号 t = find(s, t) End If ③ ? Loop Label2.Caption=“最后计算的运算符号位置为”+Str(ans) End Sub答案 (1) 4 (2)①x=x-1 ②(p=0) And (Mid(s, t, 1) = “*” Or Mid(s, t, 1) = “/”) ③t = t-1解析 本题的算法按照题目描述的四种情况考虑即可。(1)表达式 c*a+(a+b),按照从右往左查找,先找到的是“)”,继续往左查找,找到配对的“(”,继续往左查找,找到“+”,结束查找,对应位置为 4,所以答案为 4。(2)函数 find(y, x)的功能已在题中有详细描述,就是要查找配对的括号,对应题目描述中的第 3 种情况,所以答案为①x=x-1。第②空对应的题目描述中的第 2 种情况,但要考虑首次碰到的情况,所以答案为②(p=0) And (Mid(s, t, 1) = “*” Or Mid(s, t, 1) = “/”)。整个查找过程是从右往左查找,所以③空的答案为 t = t-1。7.写一个字符串压缩程序:对于2~9个相同字符组成字符串,用两个字符来编码:第一个字符表示这个字符串的长度值(即2~9);第二个字符表示相同字符的值。如字符串“AAAAA”可以压缩成“5A”,“AA”可以压缩成“2A”。如果存在某个字符串,其中没有一个字符连续重复出现,就表示成:以数字1开始,后面跟着这一字符串,再以数字1结尾。如字符串“BCE”可以表示成“1BCE1”,“A”可以表示成“1A1”。又如:“XXXXXXXXABCYYYZ”的压缩结果是“8X1ABC13Y1Z1”。假设被压缩字符串中只会出现字母,连续相同字母不会超过 9个。以下程序在Text1中输入被压缩的字符串,在Text2中输出了压缩的结果。请回答以下问题。(1)若Text1中输入的字符串为“XXXXXAXAAA”,那么压缩的结果是 。?(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。 Private Sub Command1_Click() Dim s As String Dim n As Integer,i As Integer s =Text1.Text n = Len(s):i=1:result =“” Do While i< = n s1 = Mid(s,i,1) numbers = 0 ’扫描到的字符都和s1相同 Do While ① ? i = i+1 numbers = numbers +1 Loop If numbers>0 Then result = result & ② & s1? i = i+1 End If start = i s1 =Mid(s,i, 1) numbers = 0 ’扫描到的字符都和s1不同 Do While ③ ? i = i+1 numbers = numbers +1 s1 = Mid(s,i,1) Loop If Mid(s,i+1,1)= s1 Then numbers = numbers -1 If numbers>= 0 Then result = result &“ 1” & ④ &“1”? Loop Text2.Text = result End Sub答案 (1)5X1AX13A (2)① Mid(s,i+1,1) = s1 ② numbers+1 ③ s1 <>Mid(s,i+1,1) ④ Mid(s,start,numbers+1)解析 由题意知,程序的压缩规则有两条:第一,对相邻连续相同字符的压缩,第二,不同字符的压缩。注意到内层循环有两个并列的Do While循环,每个循环的末尾都是对输出结果变量result的构造,而由构造方式也可推测,第一个循环是解决连续相同字符的压缩过程,第二个循环是解决不同字符的压缩过程。于是,不难看出第①空应该是判断和前面字符是否相等,而第③空是判断是否不相等。第②空需要模拟程序的执行,这里变量numbers用于统计相同字符的个数,而初始值是0,因此统计完之后,相同字符个数应该是numbers+1。同样,第④空是需要截取从start开始,共numbers+1个不相同的字符。课件9张PPT。第3节 字符串问题 字符(包括字符串)在计算机中存储是每个字符的内码值。字符可以直接比较大小,实际上是比较内码的大小。如“a”<“b”,“ab”<“abc”,“abc”<“abd”,“acde”<“ad”,比较方法是先比较第一个字符,如果相同,则比较第二个字符,依次类推。 1.几个常用字符的内码值:教材研读 2.字符串处理相关函数: 3.字符相加: (1)用“+”号:运算符两边必须都是字符串型,如“1”+“2”=“12”,而1+“2”则出错。 (2)用“&”号:会自动将两边的数据转成字符串型再拼接。如“1”&“2”=“12”,1&“2”=“12”。 注意:字符相加前后位置对调,结果不一样,“1”+“2” =“12”,而“2”+“1” =“21”。4.不同类型字符的判断:5.字符转换:6.字符串操作: 展开更多...... 收起↑ 资源列表 模拟演练.docx 第3节 字符串问题.pptx