Как перебрать значения ascii алфавита в Matlab

Я новичок в Matlab, и у меня проблемы с использованием функции mod.

Мне дан зашифрованный вектор строчных символов и значение сдвига, которое может быть положительным или отрицательным, которое я должен добавить к вектору
Я должен использовать функцию mod для переноса строчных букв в алфавите.< br>Например, если буква 'a', а величина сдвига равна 4, буква станет 'e'.
Отрицательное значение означает сдвиг в сторону 'a' в алфавите.
Shift должен быть 'wrap ' вокруг алфавита - 'x', смещенный на 7, должен стать 'e'.

Я пробовал писать условные операторы, используя операторы if и elseif, но я должен использовать функцию mod вместо условных выражений.


person Sarah Tate    schedule 26.05.2019    source источник


Ответы (1)


mod(x,y) — это остаток от деления x и y, имеющий тот же знак, что и y. Таким образом, при отрицательном x знак остается положительным. Это отличается от того, как mod определяется в других языках.

Очевидно, что y должно быть числом символов в диапазоне от a до z. x — это индекс сдвинутого символа, начинающийся с 0, который должен быть равен 0 для «a» и y-1 для «z». Вы можете получить это, просто вычитая значение ASCII из «a»:

letter - 'a'

Обратите внимание, что 'a' — это символ, который неявно преобразуется в значение ASCII буквы в арифметических операциях.

Затем результат операции mod снова возвращает один такой индекс, который вы можете превратить в символ, добавив значение ASCII «a»:

char(index + 'a')

Собираем все вместе:

char(mod(letter-'a', 'z'-'a'+1) + 'a')

Вместо letter вы можете использовать в этом выражении вектор букв (массив символов).

person Cris Luengo    schedule 26.05.2019