首先理解传地址:
sub1(s as string)等于sub1(byref s as string),即s是传地址的,这里也就是把st的地址传递给s,所以s就是st,s改变,st就改变,它两是同一个东西。
其次理解一个函数一个语句:
Mid(S, i, 1) = Mid(S, Len(S) - i + 1, 1)
这一句中,第一个mid是语句,第二个mid是函数。
第一个mid(s,2,1)="a"就是把字符串s中的第2个字符起的1个字符长度替换为a,
第二个mid(s,1,1)是从字符串S中第1个字符起取1个。
如果还看不懂,百度vb6 mid语句。
Option Explicit
Private Sub CmdRun_Click()
Dim St As String, i As Integer
Dim a() As String, j As Integer, k As Integer
St = "abcd"
Call sub1(St) '调用子程序,把"abcd"变成前半截是后半截的反序,即"dccd"
Print St '输出dccd
For i = 1 To Len(St) 'i从1开始到St的长度,即从St的第1个字母开始检查到最后一个字母
For j = i + 1 To Len(St) 'j从i+1到St的长度,即j代表i的下一个字母开始的所有以后字符
If Mid(St, i, 1) = Mid(St, j, 1) Then Exit For '如果第i个字符与第j个字符相同,退出循环j
Next j
If j > Len(St) Then '如果前面的循环是正常退出,则j=Len(St)+1,
'这个条件成立,代表在i位之后找不到与i位相同的字符,
'如果前面的循环是exit for退出的,则j<=Len(St),这个条件不成立
'代表在i位之后找到了与i位相同的字符
k = k + 1 '找到没有相重的字符,计数器增加1
ReDim Preserve a(k) '相应的记录数组也加1
a(k) = Mid(St, i, 1) '记录之后没有相重的字符--第i个字符
Print "a("; k; ")="; a(k) '输出当前的计数器和第i个字符
End If
Next i
End Sub
Private Sub sub1(S As String)
Dim i As Integer
For i = 1 To Len(S) \ 2 'i的变化从1到字串S的一半,即变化字串的前半截
'把前半截变成后半截的反序
Mid(S, i, 1) = Mid(S, Len(S) - i + 1, 1)
Next i
End Sub