0

入力したテキストをRot13にエンコードする簡単な方法を探しています。単語を個々の文字と整数に分離して、それぞれを変更して結果を出力できるようになった段階で、レンガの壁にぶつかっています。以下にリストされている単純なifステートメントを使用して1文字でそれを行うことができますが、誰かが単語全体に対してそれを行う方法を手伝ってくれるなら、私は非常に感謝します。

If kInput = "a" then kOutput = "n"

ありがとう、カイ

4

3 に答える 3

2

この方法を必要以上に難しくしているようです。単語などを区切る必要はなく、大きなIf/Elseブロックも必要ありません。

Public Function Rot13(ByVal input As String) As String
    Dim result As Char() = input.ToCharArray()

    For i As Integer = 0 To result.Length - 1
        Dim temp As Integer = Asc(result(i))
        Select Case temp
           Case 65 to 77, 97 To 109 'A - M
               result(i) = Chr(temp + 13)
           Case 78 to 90, 110 To 122 'N - Z
               result(i) = Chr(temp - 13)
        End Select
    Next i

    Return New String(result)
End Function

これはブラウザウィンドウに直接入力されたものであり、完全にテストされていないことに注意してください。

于 2012-10-22T18:02:12.957 に答える
2

人々はこれに良い答えを与えているように見えますが、これが私の試みです。

Dim input As String = "This is a Test!! Guvf vf n Grfg!!"
Dim result As StringBuilder = New StringBuilder()

For Each ch As Char In input

    If (Not Char.IsLetter(ch)) Then
        result.Append(ch)
        Continue For
    End If

    Dim checkIndex As Integer = Asc("a") - (Char.IsUpper(ch) * -32)
    Dim index As Integer = ((Asc(ch) - checkIndex) + 13) Mod 26

    result.Append(Chr(index + checkIndex))

Next

Console.WriteLine(result.ToString())

編集:大文字のチェックの必要性を取り除くために改善されました。これにより、ループ内のifステートメントが1つだけの大文字と小文字および特殊文字が適切に処理されます。

于 2012-10-22T18:17:37.387 に答える
0

エンコードするには一度呼び出すだけで、デコードするにはもう一度呼び出します。

Private Function ROT13_Encode(ByVal Input As String) As String
Dim chrs As Char() = Input.ToCharArray()
Dim ReturnString As String = ""
Dim CharInt As Integer

For Each Chr As Char In chrs
    CharInt = Asc(Chr)
    If CharInt >= 65 And CharInt <= 77 Then 'A-M
        CharInt += 13
    ElseIf CharInt >= 78 And CharInt <= 90 Then 'M-Z
        CharInt -= 13
    ElseIf CharInt >= 97 And CharInt <= 109 Then 'a-m
        CharInt += 13
    ElseIf CharInt >= 110 And CharInt <= 122 Then 'm-z
        CharInt -= 13
    End If
    ReturnString &= ChrW(CharInt)

Next

Return ReturnString
End Function
于 2012-10-22T18:04:11.447 に答える