1

基本的に、私はこのコードを持っています:

ReDim aPos(1 To Len(sInput))

Do
    aPos(1) = aPos(1) + 1
    For X = 1 To Len(sInput) - 1 
        If aPos(X) > Len(sInput) Then 
            aPos(X) = 1 
            aPos(X + 1) = aPos(X + 1) + 1
        End If
    Next X
    If aPos(Len(sInput)) > Len(sInput) Then Exit Do

私が理解していない唯一のことは、チェックが最後、最後の行にあることです。入力配列からのものよりも一時的に作成された「Position」配列から見つかったインデックスが多いかどうかをチェックしているように見えます。そうですか?私がフォローしていないのは、ここでの数学、反復的な性質です。

4

1 に答える 1

1

以下は、コードから可能な限り変更されていないaposの進行状況を示す小さなテストプロジェクトです。

sInput + 1の文字列長を持つ最後の要素を除いて、最終的にaposは「1」で埋められることがわかります。

'1 form with
'    1 command button : name=Command1
Option Explicit

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Command1_Click()
  Dim X As Integer
  Dim sInput As String
  Dim apos() As Integer
  Dim lngTime As Long
  sInput = "Hello"
  ReDim apos(1 To Len(sInput)) As Integer
  Do
    apos(1) = apos(1) + 1
    For X = 1 To Len(sInput) - 1
      If apos(X) > Len(sInput) Then
        apos(X) = 1
        apos(X + 1) = apos(X + 1) + 1
        ShowApos apos
        lngTime = GetTickCount + 100
        Do Until GetTickCount > lngTime
          DoEvents
        Loop
      End If
    Next X
    If apos(Len(sInput)) > Len(sInput) Then Exit Do
  Loop
End Sub

Private Sub ShowApos(apos() As Integer)
  Dim intIndex As Integer
  Dim strShow As String
  For intIndex = LBound(apos) To UBound(apos)
    strShow = strShow & CStr(apos(intIndex)) & " "
  Next intIndex
  Caption = strShow
End Sub

つまり、len(sInput)+1までいっぱいになり、配列の他のすべての要素を1に設定するカウンターが必要です。

最後の行は、最終的な値に達したときにループから抜け出すことを確認します

于 2012-12-19T08:15:32.280 に答える