计算字符串中字符的出现次数

时间:2011-03-15 16:24:15

标签: vb6

在VB6中寻找最佳方法。通常,我会使用这种方法...

   ' count spaces
    For i = 1 To Len(text)
        If Mid$(text, i, 1) = " " Then count = count + 1 
    Next

4 个答案:

答案 0 :(得分:16)

不是说这是最好的方式,但是代码可以:

distinctChr = " "
count = Len(text) - Len(Replace(text, distinctChr , ""))

答案 1 :(得分:5)

像这样使用split命令

Dim TempS As String
TempS = " This is a split  test "
Dim V As Variant
V = Split(TempS, " ")
Cls
Print UBound(V) '7
V = Split(TempS, "i")
Print UBound(V) '3
V = Split(TempS, "e")
Print UBound(V) '1

您可以将它组合成一行。

Print UBound(Split(TempS, "i"))

我做了一些粗略的时机。在具有所有空间的40,000个字符串上,它似乎在2.4 GHz Intel Core 2处理器上以17毫秒计时。

一个函数看起来像这样

Function CountChar(ByVal Text As String, ByVal Char As String) As Long
    Dim V As Variant
    V = Split(Text, Char)
    CountChar = UBound(V)
End Function

答案 2 :(得分:1)

我会使用修改后的桶排序:

Dim i as Integer
Dim index As Integer
Dim count as Integer
Dim FoundByAscii(0 To 255) As Boolean
For i = 1 To Len(text)
    index = Asc(Mid$(text, i, 1))
    FoundByAscii(index) = True
Next i
count = 0
For i = 0 To 255
    If FoundByAscii(i) Then
        count = count + 1
    End If
Next i

...您的结果在count。性能为O(N) - 如果Mid$为O(1)。

修改

根据您的澄清,请执行以下操作:

   ' count spaces
    Dim asciiToSearchFor As Integer
    asciiToSearchFor = Asc(" ")
    For i = 1 To Len(text)
        If Asc(Mid$(text, i, 1)) = asciiToSearchFor Then count = count + 1 
    Next

ascii比较必须比字符串比较更快。为了以防万一,我会对其进行分析,但我很确定。

答案 3 :(得分:0)

目前尚不清楚最佳方式的含义是什么意思。

如果您想要非常快速,但完全不可维护,请调整此horrible code以深入研究VB6字符串的底层内存以计算数量话。由VBspeed提供。