Replace character in string/cell with the character above it
    2 views (last 30 days)
  
       Show older comments
    
    Dora de Jong
 on 11 Mar 2021
  
    
    
    
    
    Commented: Dora de Jong
 on 11 Mar 2021
            String/cell example: --> real string/cell is very long
a= { 'a' ; 'b' ; 'c' ; 'b'}
Wanted outcome:
a_new= { 'a' ; 'a' ; 'c' ; 'c'}
0 Comments
Accepted Answer
  the cyclist
      
      
 on 11 Mar 2021
        
      Edited: the cyclist
      
      
 on 11 Mar 2021
  
      The general rule is not perfectly clear to me, from your small example. Do you mean that you want the even-numbered elements to be replaced? If so, then
anew = a;
a(2:2:end) = a(1:2:end-1);
If not, maybe you could explain in a little more detail.
3 Comments
  the cyclist
      
      
 on 11 Mar 2021
				
      Edited: the cyclist
      
      
 on 11 Mar 2021
  
			Here is one way:
a = { 'a' ; 'b' ; 'c' ; 'b' ; 'h' ; 'g' ; 'b'};
replace_idx = find(strcmp(a,'b'));
a_new = a;
a_new(replace_idx) = a_new(replace_idx-1);
This will not work if 'b' is the first element, so you will need to modify this algorithm in that case. But you haven't given info on what you want to do then.
More Answers (1)
  Jan
      
      
 on 11 Mar 2021
        
      Edited: Jan
      
      
 on 11 Mar 2021
  
      Maybe:
a_new = a;
a_new(2:2:end) = a(1:2:end);
Or:
index = repelemt(1:2:numel(a), 1, 2):
a_new = a(index)
[EDITED] after your comment: "So every b wil be replaced with the character above it"
index    = find(strcmp(a, 'b'));
a(index) = a(index - 1);
What about: {'a'; 'b'; 'b'} or {'b'} or {'b', 'a'}?
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!