How do I "backward" a string in matlab: turn "a" into "z", "b" into "y", "c" into "x", etc.
    5 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Darshan Kanungo
 am 1 Jun. 2015
  
    
    
    
    
    Kommentiert: Guillaume
      
      
 am 26 Aug. 2015
            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.
3 Kommentare
  Stephen23
      
      
 am 1 Jun. 2015
				
      Bearbeitet: Stephen23
      
      
 am 1 Jun. 2015
  
			@Darshan Kanungo: What is the specified/expected output for the input string '`_^]\[ {|}~' ? This is currently not specified in the question or the error message, so we have no idea how the function should behave with non-alphabetic characters. You need to specify this for us!
Akzeptierte Antwort
  Stephen23
      
      
 am 1 Jun. 2015
        
      Bearbeitet: Stephen23
      
      
 am 1 Jun. 2015
  
      >> 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!
2 Kommentare
Weitere Antworten (2)
  Jan
      
      
 am 1 Jun. 2015
        function out = codeit(in)
lut = char(1:255);
lut(['a':'z', 'A':'Z']) = ['z':-1:'a', 'Z':-1:'A'];
out = lut(in);
0 Kommentare
  charu sharma
 am 26 Aug. 2015
        For a simple understanding you can follow this too: http://farzicoders.blogspot.in/2015/08/write-function-called-codeit-that-takes.html
1 Kommentar
  Guillaume
      
      
 am 26 Aug. 2015
				I wouldn't classify this answer as spam, the link is relevant to the question (as long as it does not disappear).
However, the answer posted in the link is a poor example of coding (unnecessary loops, unnecessary conversions, unnecessary use of temporary variables), so is of little value.
Siehe auch
Kategorien
				Mehr zu Historical Contests finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



