一个数组A(),数组元素为以"-"分隔的字符串,如
A(0)="a-b-c"
A(1)="1-2"
A(2)="A-Z"
……
现在要把数组元素中的以"-"分隔的部分作为元素与别的数组元素中以"-"分隔的部分做组合(每个数组元素提供一个部分),如果能计算输出所有组合?例如上面的数组A,要输出所有组合的结果:
a_1_A
b_1_A
c_1_A
a_2_A
b_2_A
c_2_A
a_1_Z
b_1_Z
c_1_Z
a_2_Z
b_2_Z
c_2_Z请问这个程序要怎么写?
A(0)="a-b-c"
A(1)="1-2"
A(2)="A-Z"
……
现在要把数组元素中的以"-"分隔的部分作为元素与别的数组元素中以"-"分隔的部分做组合(每个数组元素提供一个部分),如果能计算输出所有组合?例如上面的数组A,要输出所有组合的结果:
a_1_A
b_1_A
c_1_A
a_2_A
b_2_A
c_2_A
a_1_Z
b_1_Z
c_1_Z
a_2_Z
b_2_Z
c_2_Z请问这个程序要怎么写?
Dim i As Long, j As Long, k As Long
Dim A0(), A1(), A2
A0 = Split(A(0), "-")
A1 = Split(A(1), "-")
A2 = Split(A(2), "-")
For i = 0 To UBound(A0)
For j = 0 To UBound(A1)
For k = 0 To UBound(A2)
Debug.Print A0(i) & "_" & A1(j) & "_"; A2(k)
Next
Next
Next
End Sub
Dim A(3) As String
Dim i As Integer, j As Integer, m As Integer, n As Integer, l As Integer, k As Integer
A(0) = "a-b-c"
A(1) = "1-2"
A(2) = "A-Z"
A(3) = "3 - 4"
Dim b() As String, b1() As String, b2() As String, b3() As String
Dim C
For i = 0 To UBound(A)
C = Split(A(i), "-")
For j = 0 To UBound(C)
ReDim Preserve b(k)
b(k) = C(j)
k = k + 1
Next
Next
For i = 0 To UBound(b)
s = Asc(b(i))
Select Case s
Case 48 To 57
ReDim Preserve b1(m)
b1(m) = b(i)
m = m + 1
Case 97 To 122
ReDim Preserve b2(n)
b2(n) = b(i)
n = n + 1
Case 65 To 90
ReDim Preserve b3(l)
b3(l) = b(i)
l = l + 1
End Select
Next
For i = 0 To UBound(b1)
For j = 0 To UBound(b2)
For k = 0 To UBound(b3)
Debug.Print b2(i) & "-" & b1(j) & "-" & b3(k)
Next
Next
NextEnd Sub
a(0) = "a-b-c"
a(1) = "1-2"
a(2) = "A-Z"
Call GetNewOrder(0, "")
End Sub
Private Sub GetNewOrder(ByVal intNum As Integer, ByVal strTemp As String)
Dim b() As String
Dim i As Integer
Dim strMy As String
b = Split(a(intNum), "-")
For i = 0 To UBound(b)
strMy = strTemp & IIf(intNum = 0, "", "_") & b(i)
If intNum < UBound(a) Then
Call GetNewOrder(intNum + 1, strMy)
Else
Debug.Print strMy
End If
Next i
End Sub结果
a_1_A
a_1_Z
a_2_A
a_2_Z
b_1_A
b_1_Z
b_2_A
b_2_Z
c_1_A
c_1_Z
c_2_A
c_2_Z
---------------------------------
分离a(i)得到数组b
a(0) "a-b-c"
——〉
b(0) "a"
b(1) "b"
b(2) "c"
-------------------------判断是否是字符串起始,如果是则不加"_"
不要这个 _a_1_A
要这个 a_1_A
Dim b() As String
Dim i As Integer
Dim strMy As String
b = Split(a(intNum), "-") '分离a(i)得到数组b,a(0) "a-b-c" ——〉b(0) "a",b(1) "b",b(2) "c"
For i = 0 To UBound(b)
strMy = strTemp & IIf(intNum = 0, "", "_") & b(i) '连接字符串
If intNum < UBound(a) Then '判断是否到a数组最后,没到继续调用,到打印
Call GetNewOrder(intNum + 1, strMy) '调用自身,递归的主要部分
Else
Debug.Print strMy
End If
Next i
End Sub