MATLAB: How to “backward” a string in matlab: turn “a” into “z”, “b” into “y”, “c” into “x”, etc.

I used the following code, but got an error…
function output_string = codeit(txt);
for ii = 1:length(txt)
input_char = txt(ii);
if input_char>='a'&&input_char<='z';
reverse_alphabet= ['z' 'y' 'x' 'w' 'v' 'u' 't' 's' 'r' 'q' 'p' 'o' 'n' 'm' 'l' 'k' 'j' 'i' 'h' 'g' 'f' 'e' 'd' 'c' 'b' 'a'];
reverse_alphabet_index = input_char - 'a' + 1;
output_char = reverse_alphabet(reverse_alphabet_index);
output_string(ii) = output_char;
elseif input_char>='A'&&input_char<='Z';
reverse_alphabet= ['Z' 'Y' 'X' 'W' 'V' 'U' 'T' 'S' 'R' 'Q' 'P' 'O' 'N' 'M' 'L' 'K' 'J' 'I' 'H' 'G' 'F' 'E' 'D' 'C' 'B' 'A'];
reverse_alphabet_index = input_char - 'A' + 1;
output_char = reverse_alphabet(reverse_alphabet_index);
output_string(ii) = output_char;
end
end
end
ans =
Feedback: Your function performed correctly for argument(s) 'azAZ'
Feedback: Your program made an error for argument(s) '`_^]\[ {|}~'
Your solution is _not_ correct.

Best Answer

You could use char:
>> char(219-'abc')
ans =
zyx
Note this assumes that the text consists only of lower-case alphabetic characters. If you want mixed case then this will be much more complicated.
EDIT in response to the OP completely rewriting their question, removing the original example and stating new requirements.
The new code given in the question is very complicated: solving this in a loop is slow and a waste of MATLAB's code vectorization abilities. Here is a completely vectorized function based on isstrprop that reverses only the alphabetic characters (keeping case the same) and ignores all other characters:
function str = str_rev(str)
idx = isstrprop(str,'upper');
str(idx) = char(155-str(idx));
idx = isstrprop(str,'lower');
str(idx) = char(219-str(idx));
end
And some examples showing it in action:
>> str_rev('abc')
ans =
zyx
>> str_rev('AbcD')
ans =
ZyxW
>> str_rev('Hello World!')
ans =
Svool Dliow!
Related Question