在VB6中寻找最佳方法。通常,我会使用这种方法...
' count spaces
For i = 1 To Len(text)
If Mid$(text, i, 1) = " " Then count = count + 1
Next
答案 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提供。