1)根据字符串长度构建一个最小的n*n矩阵,将字符串中每个字符从左到右,自上而下顺序填入矩阵,不足部分用字符“*”代替;
2)将矩阵转置(行列对换),然后将奇数行字母内码加上1,偶数行字母内码减1,字符为a、z或A、Z时做循环处理。比如,字符a减1为z;字符Z加1为A。
3)按从左到右,从上而下依次取出字符,形成新的字符串。如图a为字符串“Go to the zoo.”的加密过程。编写VB程序,在文本框Text1中输入字符串,点击“加密”按钮,在文本框Text2中输出加密后的字符串。程序运行结果如图b所示。
图a |
图b |
Dim a(1 To 100) As String, b(1 To 100) As String, n As Integer
Private Sub Command1_Click()
Dim s1 As String, s2 As String,i As Integer, j As Integer, m As Single
s1 = Text1.Text
m = Sqr(Len(s1))
If m > Int(m) Then n = Int(m) + 1 Else n = m
For i = 1 To n * n
If i <= Len(s1) Then a(i) = Mid(s1, i, 1) Else a(i) = "*"
Next i
For i = 1 To n
For j = 1 To n
b((i - 1) * n + j) = ‘将矩阵转置
b((i - 1) * n + j) = jm(i, j) ‘内码变换
Next j
Next i
s2 = ""
For i = 1 To n * n
s2 = s2 & b(i)
Next i
Text2.Text = s2
End Sub
Function jm(x As Integer, y As Integer) As String
Dim s As String
s = b((x - 1) * n + y)
If s <= "Z" And s >= "A" Or s <= "z" And s >= "a" Then
If x Mod 2 <> 0 Then
If s <> "Z" And s <> "z" Then
s = Chr(Asc(s) + 1)
Else
s = Chr(Asc(s) - 25)
End If
Else
If s <> "a" And s <> "A" Then
s = Chr(Asc(s) - 1)
Else
s =
End If
End If
End If
End Function