Я пытаюсь создать базовый шифр Цезаря в Visual Basic 2010 Express (консольное приложение), но всякий раз, когда он шифрует строку, он правильно шифрует первый символ и заменяет все остальные тем же зашифрованным символом.
Я перепробовал все, что мог придумать, и поискал по всему Интернету, и не могу найти базовый способ консольного приложения, который работает, я знаю, что это можно сделать, так как это было задано как домашнее задание, и в классе есть другие люди кто прошел через эту проблему.
Sub Main()
Dim Message As String
Dim EncMessage As String = ""
Dim counter As Integer = 0
Do Until counter = 1 'This just repeats the program
Console.Write("Please enter a string to encrypt: ")
Message = Console.ReadLine
Dim LetterArray() As Char = Message.ToCharArray
For i = 0 To LetterArray.Length - 1
EncMessage = EncMessage & Chr(Asc(LetterArray) + 3) 'Encrypts the characters one by one (i think this is where the issue is as it encrypts the first one correct but then just outputs the same character on top the correct amount of times)
'Этот оператор if просто зацикливает символы X Y Z x y z обратно в начало алфавита, поскольку он предназначен только для шифрования букв
If EncMessage = "{" Then
EncMessage = Chr(Asc(LetterArray) - 23)
ElseIf EncMessage = "|" Then
EncMessage = Chr(Asc(LetterArray) - 23)
ElseIf EncMessage = "}" Then
EncMessage = Chr(Asc(LetterArray) - 23)
ElseIf EncMessage = "[" Then
EncMessage = Chr(Asc(LetterArray) - 23)
ElseIf EncMessage = "\" Then
EncMessage = Chr(Asc(LetterArray) - 23)
ElseIf EncMessage = "]" Then
EncMessage = Chr(Asc(LetterArray) - 23)
End If
Next
Console.WriteLine(EncMessage)
Console.ReadKey()
EncMessage = ""
Loop
End Sub
Например, если я ввожу «колбаса», он будет выводить «vvvvvvv», но он должен вывести «vdtvdjh», потому что я хочу, чтобы он сдвинулся вперед на 3 символа. Пожалуйста, помогите, спасибо.
c#
? Не будучи специалистом по VB, я тем не менее вижу, что вы никогда не используете индекс циклаi
в своем коде, поэтому я предполагаю, чтоAsc(LetterArray)
всегда принимает первый символLetterArray
. Попробуйте вместо этогоLetterArray[i]
. Но вы столкнетесь с другой проблемой, потому что вы сравниваете все закодированное сообщение, а не только последний символ ... - person derpirscher   schedule 26.01.2019a
иA
соответственно, а если оно ›26, вы можете выполнить операцию по модулю ... - person derpirscher   schedule 26.01.2019