vb 关于数组比较的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 20:59:30
Private Sub Command1_Click()
a = "10, 10, 12"
b = "9, 9, 10"
MsgBox ftp(a, b)
End Sub

Private Function ftp(ByVal dd As String, ByVal cc As String) As Integer
Dim a As String, b As String
Dim i As Integer, j As Integer
Dim gb
gb = Split(dd, ",")
dd = ""
For i = LBound(gb) To UBound(gb)
dd = dd & Chr(gb(i))
Next i
gb = Split(cc, ",")
cc = ""
For i = LBound(gb) To UBound(gb)
cc = cc & Chr(gb(i))
Next i
For i = 1 To Len(dd)
a = Mid(dd, i, 1)
For j = 1 To Len(cc)
b = Mid(cc, j, 1)
If a = b Then
ftp = ftp + 1
Exit For
End If
Next
Next
End Function
老师看一下这个代码,我的要求是 "10, 10, 12"和"9, 9, 10"比较,看它们之间有几个数是重复的,现在代码是输出2,如果MsgBox ftp(b, a)他输出1,我要的结果是1,但是在我的代码中a和b是变量,不确定的,怎么能不论是a和b比或b和a比他都是1,
如果是"10, 10, 12"和"9, 10, 10&q

我改了下,你的FTP函数里面用SPLIT(DD,“,”)和SPLIT(CC,“,”)换成数组后可直接比较,下面是代码:

Option Explicit
Private Sub Command1_Click()
Dim a As String, b As String
a = "10,10,12"
b = "9,10,10"
MsgBox ftp(a, b)

End Sub

Private Function ftp(ByVal dd As String, ByVal cc As String) As Integer
Dim i As Integer, j As Integer
Dim gb, gc
gb = Split(dd, ",")
gc = Split(cc, ",")
For i = LBound(gb) To UBound(gb)
For j = LBound(gc) To UBound(gc)
If gb(i) = gc(j) Then
gb(i) = "_"
gc(j) = "_"
ftp = ftp + 1
Exit For
End If
Next j
Next i
End Function

因为你的算法是第一个数组的每个元素都和第二个数组的所有元素进行比较。这就导致你得出的结果是,第一个数组到底有多少个和第二个数组相同的元素。
例如10,10,12和9,9,10
第一次循环,第一个十匹配了,ftp=1,
第二次循环,第二个十匹配了,ftp=2.
当你倒过来的时候,
9,9,10 和10,10,12
第一次循环,没有匹配
第二次循环也没有匹配
第三次循环才匹配了10,ftp=1;
改进