【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《VB编程在一串字符串中找一单词》,欢迎阅读!
3、在一串字符串中找一单词,如果字符串中含有‘*’,可以代替任何字符。
单词在字符串出现的次数。 例如输入: abcfab**b* abc
VB代码如下:
Private Sub Command1_Click()
Dim s1() As String, s2() As String '定义两个数组,分别存放两个字符串,其中S1存放较长的字符串,S2存放将要找的子串。
Dim m As Integer, n As Integer 'm与n用于表示S1和S2的长度值 Dim i As Integer, k As Integer, r As Integer
Dim p As Integer, q As Integer 'p、q用于计数 n = Len(T1.Text) m = Len(T2.Text)
ReDim s1(1 To n) '动态定义数组,用于存放较长字符串 ReDim s2(1 To m) q = 0
For i = 1 To n '将较长字符串放入数组s1(n)中 s1(i) = Mid(T1.Text, i, 1) Next
For i = 1 To m '将子串放入数组s2(m)中 s2(i) = Mid(T2.Text, i, 1) Next
'下面用到了三层循环,为了说清楚,假设有一串字符“abcfab**b*”放在数组S1中,则数组S1各元素的值应该是:S1(1)="a",s1(2)="b",s1(3)="c",„„s1(10)="*" '同样,子串“abc”放在数组s2中,有s2(1)="a",s2(2)="b",s2(3)="c",
For r = 1 To m '最外层r=1时,表示我们是从字符串“abcfab**b*”的第一个字符开始比较,r=2,表示从字符串“abcfab**b*”的第二个字符开始比较,依此类下去,一直到m
For i = r To m * Int((n - r + 1) / m) Step m '我们讲r=1情形:当r=1时,那么从第一个字符开始,对字符串“abcfab**b*”分成块,即Int(n/ m)
'因n=10,m=3,即分成三块"abc","fab","**b"。
'而我们再次m来乘以Int((n - r + 1) / m),然后取步长m,则是为了下面的S2数组来与S1的三个字符串"abc","fab","**b"比较,如第一次比较的是"abc",经过下面的循环后,第二次比较的就是"fab",„„
p = 0 'p用来每次比较时,s1与s2对应元素是否相同,在下面的循环中,如果相同,则执行 p = p + 1 For k = 1 To m
If s1(i + k - 1) = s2(k) Or s1(i + k - 1) = "*" Then 's1与s2对应元素相同或者s1中数组元素为"*"时,将p进行计数 p = p + 1 End If Next k
If p = m Then q = q + 1 '如果p与s2元素个数相同,表示这串字符相同,则将q进行计数一次 Next i
T3.Text = q Next r End Sub
'这道题我可能做得复杂了一点,但应该比较好理解,就是把一长串字符s1先从第一个字符开始,按要查的子串s2长度分成几块,找一遍,然后再把字符串s1从第二个字符开始,再分成几块来找一遍。
'用数组时,要注意下标溢出的问题,让其取整,就是为了克服这个问题,我被这个问题也折腾了很久
'还有因为这道题要求"*"可以代替任意字符,不能用字符串的那些函数来做,如果没有这个要求,用instr( )或split() 函数即可解决。
本文来源:https://www.wddqxz.cn/2b95d5ec998fcc22bcd10db8.html