尋找在VB6中執行此操作的最佳方式。通常情況下,我會用這種方法...計算字符串中字符的出現次數
' count spaces
For i = 1 To Len(text)
If Mid$(text, i, 1) = " " Then count = count + 1
Next
尋找在VB6中執行此操作的最佳方式。通常情況下,我會用這種方法...計算字符串中字符的出現次數
' count spaces
For i = 1 To Len(text)
If Mid$(text, i, 1) = " " Then count = count + 1
Next
我會使用修改後的桶排序:
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比較得更快一些字符串比較。我只是爲了以防萬一,但我很確定。
非常好的答案!儘管如此,我沒有聲明ASCII是一項要求,但我喜歡將搜索限制在特定字符範圍內的想法。原來我的問題很適合這個解決方案。 – 2011-03-15 16:54:55
我猜'AscW'會更快,因爲VB6字符串在內部是Unicode – MarkJ 2011-03-15 17:34:14
不是說這是最好的方式,但你的代碼做:
distinctChr = " "
count = Len(text) - Len(Replace(text, distinctChr , ""))
我喜歡這個答案的簡潔方法。 – 2011-03-15 16:49:03
一旦問題發生變化,這成爲更好的答案。 :) – 2011-03-17 16:40:45
管道磁帶編程的美麗例子(https://www.joelonsoftware.com/2009/09/23/the-duct-tape-programmer/)。很喜歡它。 – 2017-02-14 18:06:07
目前尚不清楚你的意思是最好是這樣做的方法。
如果你想要的東西非常快,但完全難以維護,適應這個horrible code是深入到一個字符串,VB6的底層內存來算話的人數。感謝VBspeed。
使用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
我也喜歡這個答案。如果我能接受兩個問題的答案,我也會接受你的答案。 – 2011-03-15 18:39:53
比公認的更優雅的解決方案。 – Stanton 2012-11-30 17:26:36
你想指望空格或不同的角色? – 2011-03-15 16:27:52
這種方法有什麼問題? – Beth 2011-03-15 16:28:10
那麼你想要計算獨特的人物或特定的人物?你的標題顯示'獨特',你的樣本建議'具體'。 – mwolfe02 2011-03-15 16:28:26