在单元格数组中所有字符串的每个字符之间放置一个字符
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'
我有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'