搜索大量字符串中出现的指定字符的位置,怎样的算法比较好?
实际上的字符串的数据有30K左右,找起来真慢
比如
xString= "abCFifFFpF "
搜索里面所有 大写的 "F " 的位置,
列出所有位置: 4 7 8 10
怎样的算法能快些?
我用的是 instr,找到一个后再从这个位置往下找···
[解决办法]
instr是非常快的函数,实在不懂区区30K的文本,能称上大量吗?对速度会有什么影响?
Private Function StatStr(SrcStr As String, CKStr As String, Pos() As Long) As Long
Dim i As Long, k As Long, j As Long
k = Len(SrcStr)
i = InStr(1, SrcStr, CKStr)
Do While i > 0
ReDim Preserve Pos(j)
Pos(j) = i
j = j + 1
i = i + 1
If i > k Then Exit Do
i = InStr(i, SrcStr, CKStr)
Loop
StatStr = j
End Function
Private Sub Command1_Click()
Dim i As Long, Pos() As Long, s As String, t As Single
s = Space$(300000)
For i = 1 To Len(s)
Mid(s, i, 1) = Chr$(Int(Rnd * 90) + 33)
Next
t = Timer
i = StatStr(s, "F ", Pos)
Debug.Print Timer - t
Debug.Print Left$(s, 512)
Debug.Print Pos(0)
Debug.Print Pos(i - 1)
Debug.Print i
End Sub
我没用30K,而是大约用了300K,因为30K时太快了,根本测不出耗时,其实300K,在我机器上大多数情况下也是因为在10毫秒以内,测不出来。