輸入字符串如 "123**456",星號 * 代表 0-9 任意數字,**星號個數不固定**。需生成所有組合:12300456, 12301456, ..., 12399456 (兩個星號共 100 種)。
' 模塊級變量收集結果 (或直接輸出)
Dim results As New Collection
Sub GenerateCombinations(inputStr As String)
Set results = New Collection
RecursiveReplace inputStr, 1
' 此處可遍歷 results 輸出或寫入文件
Dim item As Variant
For Each item In results
Debug.Print item
Next
End Sub
Sub RecursiveReplace(currentStr As String, startPos As Long)
Dim starPos As Long
starPos = InStr(startPos, currentStr, "*")
If starPos = 0 Then
' 無星號,遞歸終點:收集結果
results.Add currentStr
Exit Sub
End If
' 有星號:遍歷 0-9 替換,遞歸處理剩餘部分
Dim i As Long
For i = 0 To 9
' 替換當前星號為數字 i
Dim newStr As String
newStr = Left(currentStr, starPos - 1) & CStr(i) & Mid(currentStr, starPos + 1)
' 遞歸處理下一個位置 (starPos 之後)
RecursiveReplace newStr, starPos + 1
Next i
End Sub
Private Sub Command1_Click()
GenerateCombinations "123**456"
' 立即窗口輸出 100 行組合
End Sub
Sub IterativeCombinations(inputStr As String)
Dim starCount As Long
starCount = CountStars(inputStr) ' 統計星號數
If starCount = 0 Then
Debug.Print inputStr
Exit Sub
End If
Dim total As Long
total = 10 ^ starCount ' 總組合數
Dim i As Long, j As Long
Dim chars() As String
ReDim chars(Len(inputStr))
For i = 1 To Len(inputStr)
chars(i) = Mid(inputStr, i, 1)
Next
Dim starPositions() As Long
ReDim starPositions(starCount)
Dim idx As Long
For i = 1 To Len(inputStr)
If chars(i) = "*" Then
idx = idx + 1
starPositions(idx) = i
End If
Next
For i = 0 To total - 1
' 將 i 轉為 starCount 位 10 進制數 (不足左補 0)
Dim numStr As String
numStr = Right(String(starCount, "0") & CStr(i), starCount) ' VB6 無格式化函數,簡化邏輯
' 實際需自寫補零函數
' 替換星號
For j = 1 To starCount
chars(starPositions(j)) = Mid(numStr, j, 1)
Next
Debug.Print Join(chars, "") ' VB6 無 Join,需循環拼接字符串
Next
End Sub
註: VB6 字符串操作函數較弱,遞歸法代碼最簡潔易懂。星號數 < 7 時遞歸深度安全;超大組合量建議直接寫入文件而非內存收集。
InStr = 0)。&,Mid/Left/Right 索引從 1 開始。VB 字符串通配符組合生成,遞歸算法最簡潔: 找星號 → 替換 0-9 → 遞歸處理剩餘。代碼不足 20 行,完美解決星號個數不固定、位置任意的通用組合生成問題。