在字符串的单元格数组中交换两个字符

时间:2017-03-17 07:08:25

标签: string matlab swap cell-array

我有一个字符串的单元格数组,我想在单元格数组的百分比中交换A和B,比如20%,单元格数组中字符串总数的30% 例如:

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

现在,我们需要在A(2/5序列)的40%序列中交换A和B.有些序列不包含A和B,所以我们只是跳过它们,我们将交换包含AB的序列。 A中的拾取序列是随机选择的。我认为有人可以告诉我该怎么做。预期的输出是:

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

2 个答案:

答案 0 :(得分:1)

您可以使用strfind,例如:

A_in={ 'ABCDE';
    'ACD';
    'ABCDE';
    'ABCD';
    'CDE' };
ABcells = strfind(A_in,'AB');
idxs = find(~cellfun(@isempty,ABcells));
n = numel(idxs);
perc = 0.6;
k = round(n*perc);
idxs = randsample(idxs,k);
A_out = A_in;
A_out(idxs) = cellfun(@(a,idx) [a(1:idx-1) 'BA' a(idx+2:end)],A_in(idxs),ABcells(idxs),'UniformOutput',false);

答案 1 :(得分:1)

获取randsample的随机precent索引并与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));