Как зациклить значения ASCII алфавита в Matlab - PullRequest
1 голос
/ 26 мая 2019

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

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

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

1 Ответ

0 голосов
/ 26 мая 2019

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

Я, очевидно, y должно быть количеством символов в диапазоне az.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 вы можете использовать вектор букв (массив символов) в этом выражении.

...