在单元格数组中所有字符串的每个字符之间放置一个字符

Put a character in between every character of all strings in a cell-array

我有input-cell = {'ABCD', 'ABD', 'BCD'}。如何将运算符 < 放入输入单元格的字符串中?

预期的输出应该是:

 output-cell = {'A<B<C<D', 'A<B<D', 'B<C<D'}
inputcell = {'ABCD', 'ABD', 'BCD'}; %// Initial cell
outputcell = cell(size(inputcell)); %// Initialise output
for ii = 1:numel(inputcell)
    tmp = inputcell{ii}; %// grab the iith cell
    tmp2=[]; %// Initialise empty collector
    tmp2(1:2:numel(tmp)*2)=tmp; %// Put characters on odd indices
    tmp2(tmp2==0)='<'; %// Fill the even indices with <
    outputcell{ii} = tmp2(1:end-1); %// Store the new string
    clear tmp2 %// Clear the temporary string
end
outputcell
outputcell = 
    'A<B<C<D'    'A<B<D'    'B<C<D'

这利用了这样一个事实,即 inputcell 中的每个条目都是一个 1xN 字符数组,您可以使用索引访问它。只需在每个字母后附加 < 并存储新字符串即可。感谢@Daniel 移除了内部循环。

这是另一种方法。您可以使用

将您需要的 < 的数量附加到每个单元格的末尾
t = strcat(input_cell{n}, repmat('<', 1, length(input_cell{n})-1));

然后您可以简单地重新排列每个单元格中的字符,将 < 放在正确的位置

output_cell{n}(1:2:length(t)) = t(1:ceil(length(t)/2));
output_cell{n}(2:2:length(t)) = t(1+ceil(length(t)/2):length(t));

把这个加在一起得到

input_cell = {'ABCD', 'ABD', 'BCD'};
output_cell = cell(size(input_cell));

for n = 1:length(output_cell)
    t = strcat(input_cell{n}, repmat('<', 1, length(input_cell{n})-1));
    output_cell{n}(1:2:length(t)) = t(1:ceil(length(t)/2));
    output_cell{n}(2:2:length(t)) = t(1+ceil(length(t)/2):length(t));
end

产生

>> output_cell
output_cell = 

    'A<B<C<D'    'A<B<D'    'B<C<D'

要在元胞数组中的每个字符串的字符之间插入固定字符 (<):您可以使用 regexeprep,如下所示:

input_cell = {'ABCD', 'ABD', 'BCD'};                        %// input cell array
c = '<';                                                    %// character to be inserted
output_cell = regexprep(input_cell, '.(?=.)', ['[=10=]' c]);    %// output cell array

结果:

output_cell = 
    'A<B<C<D'    'A<B<D'    'B<C<D'