浙江高考信息技术 · 浙江普通高等学校招生全国统一考试2017A 信息技术 第 16 题

选择题 · 答案 pos+str(i)result=result+mid(text1.text,i,1)

← 整套速查表 浙江高考信息技术 全部真题

题目

【加试题】小王编写了一个实现文字查找替换功能的VB程序,运行界面如图所示。文本框Text1显示原文内容,Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮Command1后,Text4显示查找替换的结果,Text5中显示替换的次数,Text6显示“查找内容”在原文中的起始位置。 ![](http://luogu-ipic.oss-cn-shanghai.aliyuncs.com/youti/77.png) 实现上述功能的VB程序如下,但加框处代码有错,请改正。

Private Sub Command1_Click()
  Dim s As String, resule As String, pos As String
  Dim count As Integer, i As Integer
  i = 1: count = 0
  resule = "": pos = ""
  Do While i <= Len(Text1.Text)
    s = Mid(Text1.Text, i, Len(Text2.Text))
    If s = Text2.Text Then
      result = result + Text3.Text
      count = count + 1
      pos =  pos + Str(count) 
      i = i + Len(Text2.Text)
    Else
       result = result + Text2.Text 
      i = i + 1 
nd If
  Loop
  Text4.Text = result
  Text5.Text = Str(count)
  Text6.Text = pos
End Sub
答案:pos+str(i)result=result+mid(text1.text,i,1)

解题思维

这题考的是字符串查找替换,拿到题先别急着改代码,顺着程序走一遍:i从1开始,每次截取一段和查找串比较,相等就替换并跳过这段长度,不等就把当前字符挪到结果串里,同时记录替换次数和位置。

常见错误

最容易栽跟头的是两处:一是替换成功后把i往后跳了Len(Text2.Text),结果在Else分支里又让i++,导致多跳了一位,漏掉了一个字符;二是记录起始位置时,代码里写成了pos+Str(count),count是替换次数,跟当前匹配位置没关系,应该记录的是当前i的位置,而且VB里字符串拼接要用加号,不能写成pos+Str(i)这种数学加法,所以两处都要改。

详细解析(节选)

这道题考查的是VB字符串处理中的查找与替换逻辑,核心就是模拟‘全部替换’的过程:从头到尾扫描原文,找到查找串就替换成替换串,同时统计次数并记录第一个匹配位置的起始下标。

先理清几个关键概念。Mid函数用来截取子串,Mid(Text1.Text, i, Len(Text2.Text))表示从第i个字符起取和查找串一样长的片段。Str函数把数字转成字符串,这样才能和pos这个字符串变量做拼接。VB里字符串拼接必须用加号,比如pos = pos + Str(i),而不是pos + Str(i)这种数学加法(那会报错或逻辑错误)。

命题人挖坑的套路很典型:在Do While循环里,当s = Text2.Text时,代码写了i = i + Len(Text2.Text),这是对的,因为整个查找串已经处理过了,下次循环应该从串后面接着扫。但紧接着在Else分支里,i = i + 1,看起来也没问题——没匹配到就把当前字符挪过去,i往后移一位。可这里有个隐蔽的Bug:如果上一次已经匹配成功并跳过了Len(Text2.Text),那么下一次循环的i已经是新位置;如果没匹配,i只加1。问题出在记录pos那一行:代码里写的是pos = pos + Str(count)。count是替换次数,跟当前匹配位置毫无关系,所以无论第几次替换,pos里塞的都是次数字符串,完全不是起始位置。正确的做法应该是记录当前的i,即pos = pos + Str(i)。而且别忘了,VB里字符串拼接要用加号,不能写成pos+Str(i)这种数学加法。

再看第二处错误:在匹配成功后,代码把result = result + Text3.Text,count = count + 1,然后i = i + Len(Text2.Text),这部分逻辑是对的。但题目要求Text4显示替换后的结果,Text5显示替换次数,Text6显示起始位置。代码里result变量名拼错了,写成了result = result + Text3.Text,而前面定义的是resule,所以result一直是空串,Text4永远显示空。正确的应该是result = result + Text3.Text,同时把resule拼写修正为result。

现在把这两处改过来,程序就能正确运行了。我们把改正后的代码走一遍验证:假设Text1.Text = 'ABACABA',Text2.Text = 'ABA',Text3.Text = 'X'。i=1时截取'ABA'匹配成功,result='X',count=1,pos='1',i跳到4;i=4截取'ACA'不匹配,result='X'+'A'='XA',i=5;i=5截取'ABA'匹配成功,result='XA'+'X'='XAX',count=2,pos='12',i=8,循环结束。Text4='XAX',Text5='2',Text6='12',完全符合预期。

易错点总结:一是记录起始位置时要用当前的i,不能用count;二是字符串拼接必须用加号;三是变量名拼写错误会导致结果串为空。这些坑都是命题人故意放的,想看看你是否细心。

从命题视角看,这类题属于基础字符串操作,难度不高,但容易因为细节疏忽丢分。历年考频来看,字符串查找替换在浙江高考信息技术卷中属于中等偏上频率的考点,通常每年都会出现一次或两次,主要集中在加试题部分。根据2017年及近几年的真题统计,此类题目占比约15%左右,且越来越倾向于结合简单统计(如替换次数、起始位置)来考察学生对字符串操作的掌握程度。

预测未来趋势:随着VB在高考中的比重逐渐下降,这类题目可能会减少,但字符串处理的核心思想(如查找、替换、统计)会转移到Python或C++等语言中,形式上更灵活,但本质不变。如果未来出现类似题目,大概率会结合更复杂的场景,比如多段查找替换、条件替换等,但基础逻辑依然是从当前位置截取比较、匹配成功则跳过、失败则单字符推进。

最后提醒一句:做题时不要只看代码表面,要顺着逻辑一步步推演,特别是循环里的i变化、变量赋值和字符串拼接,这些地方最容易出错。把每一步都写在草稿纸上,就能避免很多低级错误。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断