2017-09-21 4 views
0

시저 암호를 에뮬레이트하려고합니다. 문제는 "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보다 크지 않은지 확인해야합니다. 그 점을 넘어 서면 구두점, 기호 및 그 물건을 얻을 수 있습니다. 구글 "ASCII 테이블"그리고 당신은 쉽게 그것을 직접 볼 수 있습니다.

문제를 해결하기 위해 이동 후 얻는 Ascii 코드가 122보다 큰 경우 돌아가서 "a"에 대한 ascii 인 97에서 다시 시작해야합니다. 대신이의 그래서

:

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

당신이해야 할 일

같은
  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 
shift 26보다 큰 경우이 안정 될 것이지만, 어쨌든 당신은 이미 확인하는 것이

어떤 확신하지의 가치 그래서 그것을 작동합니다.

+0

대문자는 어떨까요? – fofik

+1

대문자의 ASCII 코드가 다릅니다. 그들은 65 세에서 90 세까지입니다. 동일한 개념을 다른 간격으로 적용해야합니다. 메시지에 대문자와 소문자를 모두 넣고 싶다면, 이동하기 전에 원래의 문자가 위 또는 아래인지 확인한 다음 결과 char이 90 (위) 또는 122 (아래)보다 크지 않도록 제어를 변경해야합니다. 다른 한편, 메시지 케이스에 신경 쓰지 않는다면 ToUpper() 또는 ToLower()를 사용하여 전체 메시지를 처음 변환 한 다음 단 한 번의 간격 만 처리 할 수 ​​있습니다. – Alicia

+0

"문자열"z {|} "에서 유효하지 않은 정수를 입력하는 변환" 하지만 어쨌든 작동하도록했습니다. 내가 지금하고있는 유일한 문제는 대문자이다. 나는 당신의 제안을 시도 할 것이다 :) Thank you :-) –

관련 문제