用VB如何实现输入原始字符然后输出替换字符(大概需要输入15位左右)

如题所述

根据每个字符替换前后的字符的 ASCII 码即可找到规律,即奇数 ASCII 码时与该 ASCII 码的下一个 ASCII 码所对应的字符替换,参考代码如下:

' 模块代码
Option Explicit

Public Function ReplaceEx(ByVal Target As String) As String
    Target = UCase$(Target)
    
    Dim intLoop     As Integer
    Dim intASCII    As Integer
    
    For intLoop = 1 To Len(Target)
        intASCII = Asc(Mid$(Target, intLoop, 1))
        
        Select Case intASCII
            
            ' 0-9, A-Z
            Case 48 To 57, 64 To 90
                
                If intASCII Mod 2 = 1 Then
                    Mid$(Target, intLoop, 1) = Chr$(intASCII - 1)
                Else
                    Mid$(Target, intLoop, 1) = Chr$(intASCII + 1)
                End If
                
        End Select
    Next
    
    ReplaceEx = Target
End Function

' 窗体按钮 Click 事件代码
Private Sub Command1_Click()
    MsgBox ReplaceEx("?AcKR18"), vbInformation, "ReplaceEx"
End Sub


输出:


补充说明:

ReplaceEx 函数中使用了 UCase$ 函数忽略了输入参数 Target 的大小写,如果要严格区分那就去掉 Target = UCase$(Target)

追问

没有对! 比如我输入E9N0CV 输出就是D8O1BW

追答


追问

能不能把你这个存一个工程给我

追答

如果你要输入时直接看到效果,不妨把对 ReplaceEx 的调用放入 TextBox 的键盘事件中

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
    Text2.Text = ReplaceEx(Text1.Text)
End Sub

工程窗体中上面一个文本框名称为 Text1,下面一个为 Text2

实时改变效果:

追问

晓得了哈 谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-16
Private Sub Form_Load()
  Text2.Enabled = False
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
  Select Case KeyAscii
    Case 65
      Text2.Text = Text2.Text + Chr(64)
    Case 66 To 90
      Text2.Text = Text2.Text + Chr(KeyAscii + 1)
    Case 48 To 57
      If KeyAscii Mod 2 = 0 Then
        Text2.Text = Text2.Text + Chr(KeyAscii + 1)
      Else
        Text2.Text = Text2.Text + Chr(KeyAscii - 1)
      End If
    Case Else
      KeyAscii = 0
      Beep
  End Select
End Sub

追问

如果txt1中输入错误如何使用删除键来删除,TXT1删除后TXT2也会同时删除对应的,还有就是如何实现ctrl+C 或者V的功能
而且好像你这个对应关系不对

追答

对应关系完全正确!其他功能你的问题中没有涉及,好在不难解决,你可以自己探索。

对应关系完全正确!至于其他功能,你的问题中没有涉及,好在不难解决,你可以自己探索。