寻找在VB6中执行此操作的最佳方法.通常,我会使用这种方法......
' count spaces
For i = 1 To Len(text)
If Mid$(text, i, 1) = " " Then count = count + 1
Next
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 16
不是说这是最好的方式,但你的代码是:
distinctChr = " "
count = Len(text) - Len(Replace(text, distinctChr , ""))
Run Code Online (Sandbox Code Playgroud)
像这样使用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
Run Code Online (Sandbox Code Playgroud)
您可以将它组合成一条线.
Print UBound(Split(TempS, "i"))
Run Code Online (Sandbox Code Playgroud)
我做了一些粗略的时机.在具有所有空间的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
Run Code Online (Sandbox Code Playgroud)
我会使用修改后的桶排序:
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
Run Code Online (Sandbox Code Playgroud)
...你的结果是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
Run Code Online (Sandbox Code Playgroud)
因为 ascii 比较必须比字符串比较更快。我会对其进行分析以防万一,但我很确定。