VB编程在一串字符串中找一单词

2022-07-13 23:17:13   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《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 'mn用于表示S1S2的长度值 Dim i As Integer, k As Integer, r As Integer

Dim p As Integer, q As Integer 'pq用于计数 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 '将较长字符串放入数组s1n)中 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)mS2S1"abc","fab","**b"比较,如第一次比较的是"abc",经过下面的循环后,第二次比较的就是"fab",„„




p = 0 'p用来每次比较时,s1s2对应元素是否相同,在下面的循环中,如果相同,则执行 p = p + 1 For k = 1 To m

If s1(i + k - 1) = s2(k) Or s1(i + k - 1) = "*" Then 's1s2对应元素相同或者s1中数组元素为"*"时,将p进行计数 p = p + 1 End If Next k

If p = m Then q = q + 1 '如果ps2元素个数相同,表示这串字符相同,则将q进行计数一次 Next i

T3.Text = q Next r End Sub

'这道题我可能做得复杂了一点,但应该比较好理解,就是把一长串字符s1先从第一个字符开始,按要查的子串s2长度分成几块,找一遍,然后再把字符串s1从第二个字符开始,再分成几块来找一遍。

'用数组时,要注意下标溢出的问题,让其取整,就是为了克服这个问题,我被这个问题也折腾了很久

'还有因为这道题要求"*"可以代替任意字符,不能用字符串的那些函数来做,如果没有这个要求,用instr( )split() 函数即可解决。


本文来源:https://www.dywdw.cn/2b95d5ec998fcc22bcd10db8.html

相关推荐
推荐阅读