2017-09-21 8 views
0

私はCaesar Cipher暗号化をエミュレートしようとしています。問題は、 "wxyz"を入力するたびに出力されます。
3によってシフトされます)出力は "z {|}"です。しかし、期待される出力は "zabc"でなければなりません。VB - Caesar Cipherエミュレーション

追加するものは誰でも知っていますか?

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
      Dim plaintext As String = TextBox1.Text 
      Dim charArray() As Char = plaintext.ToCharArray 
      Dim shift = TextBox2.Text 
      Dim character As String 
      Dim temp As String 
      TextBox3.Text = "" 



      If shift <> "" And IsNumeric(shift) Then 
       If plaintext = "" Then 
        MsgBox("Please input some plain text") 
        Exit Sub 
       End If 
       If shift > 26 Then 
        MsgBox("Maximum shifts reached. Limit is 26!!") 
        Exit Sub 
       End If 
       For loope = 0 To charArray.Length - 1 Step +1 
        temp = charArray(loope) 

        character = Chr(Asc(temp) + shift) 

        TextBox3.Text += character 


       Next 
       Exit Sub 
      Else 
       MsgBox("Input numbers only!!") 
      End If 


     End Sub 
+0

いい宿題:-) – muffi

+0

実際には、私たちの中間プロジェクトです:-) –

答えて

0

Asciiコードをシフトすると、文字「z」のAsciiコードである122より大きくならないことを確認する必要があります。その点を超えると、句読点、記号、そのようなものが得られます。 Googleの "ASCIIテーブル"とあなたは簡単に自分のためにそれを見ることができます。

あなたの問題を解決するには、シフト後に取得するAsciiコードが122より大きい場合は、「a」のアスキーである97に戻ります。これに代えので

、:

  For loope = 0 To charArray.Length - 1 Step +1 
       temp = charArray(loope) 
       character = Chr(Asc(temp) + shift) 
       TextBox3.Text += character 
      Next 

あなたはshiftが26より大きい場合、これは安定するだろうとはありませんかなり確実

  For loope = 0 To charArray.Length - 1 Step +1 
       temp = charArray(loope) 
       character = Chr(Asc(temp) + shift) 
       ' You substract 26, the whole length of the alphabet 
       If character > 122 Then 
        character = character - 26 
       End If 
       TextBox3.Text += character 
      Next 

ような何かを行う必要がありますが、とにかくあなたはすでにをチェックそれがうまくいくはずです。

+0

大文字はどうですか? – fofik

+1

大文字には異なるASCIIコードがあります。彼らは65から90になります。同じコンセプトを異なる間隔で適用する必要があります。メッセージに大文字と小文字の両方を入れたい場合は、シフト前に元の文字が下か上かを確認し、結果の文字が90(上)または122(下)以下であることを制御してください。一方、メッセージの大文字小文字を気にしない場合は、ToUpper()またはToLower()を使用してメッセージ全体を最初に変換し、その後1つの間隔だけを処理できます。 – Alicia

+0

"文字列" z {|} "から無効な整数型への変換"とにかく私はそれを働かせました。私が今作業している唯一の問題は大文字です。私はあなたの提案を試みるつもりです:)ありがとう:-) –

関連する問題