Search code examples
stringmatlabswapcell-array

Swap two characters in the cell array of strings


I have a cell array of string and I want to swap A and B in a percentage of the cell array , like 20%, 30% of the total number of strings in the cell array For example :

 A_in={ 'ABCDE'
        'ACD'
        'ABCDE'
        'ABCD'
        'CDE' }; 

Now, we need to swap A and B in 40% of the sequences in A (2/5 sequences ). There are some sequences which do not contain A and B so we just skip them, and we will swap the sequences which contain AB . The pickup sequences in A are chosen randomly. I appropriate someone can tell me how to do this . The expected output is:

  A_out={ 'ABCDE'
          'ACD'
          'BACDE'
          'BACD'
          'CDE' }

Solution

  • Get the random precent index with randsample and swap with strrep

    % Input
    swapStr = 'AB';   
    swapPerc = 0.4; % 40%
    
    % Get index to swap
    hasPair = find(~cellfun('isempty', regexp(A_in, swapStr)));
    swapIdx = randsample(hasPair, ceil(numel(hasPair) * swapPerc));
    
    % Swap char pair
    A_out = A_in;
    A_out(swapIdx) = strrep(A_out(swapIdx), swapStr, fliplr(swapStr));