У меня есть этот код, который сдвигает алфавит на определенную сумму. Размер алфавита равен 26. Когда я вхожу в сдвиг большего размера (например, 22), я получаю некоторые странные символы. Я думаю, мне нужно модифицировать алфавит ASCII до 26, чтобы заставить его работать, но я не совсем уверен, какой бит мод.Моды и ASCII в VB Caesar Shift
В принципе, мне нужно обернуть вокруг алфавита (как только он дойдет до Z, он вернется к букве A) Должен ли я создать словарь для мода для работы (например, A = 0 ... Z = 26) или может Я придерживаюсь обычной таблицы ASCII? Вот код ниже:
Public Function encrypt(ByVal input As String) 'input is a variable within the funcion
Dim n as Integer
Dim i As Integer
n = key.Text Mod 26 'gets what is in the text box of 'key' and sets it as n
' the key is a multiple of 26 so 26 will = 0
'need to remove white spaces
While input.Contains(" ") 'when the input text contains a space
input = input.Replace(" ", "") 'replaces it with no space.
End While
For i = 1 To Len(input) 'find the length of the input
Mid(input, i, 1) = Chr(Asc(Mid(input, i, 1)) + n) 'chr returns the character associated with the specified character code
'
Next
encrypt = input
End Function
Что касается вашего комментария о нулевых индексах, 'Mid' использует индекс на основе 1, так что цикл был в порядке, во всяком случае. – Timiz0r
Спасибо за быстрый ответ. Извините за глупые вопросы, я до сих пор довольно новичок в этом языке. Я не совсем уверен, что делает код и как он работает, и я очень смутился. Я попытался заменить свой код на ваш, и он, похоже, ничего не конвертирует. Как я мог заставить его обернуться (например, буква Z со сдвигом 3 вернется к букве C)? –
@K_McCormic У меня была опечатка: an = символ вместо плюса (bad shift key). У меня также нет компилятора, поэтому он все еще не проверен, но должен быть по крайней мере немного ближе. –