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

时间:2015-10-10 16:39:44

标签: string matlab cell-array

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

预期输出应为:

 output-cell = {'A<B<C<D', 'A<B<D', 'B<C<D'}

3 个答案:

答案 0 :(得分:4)

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

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

结果:

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

答案 1 :(得分:2)

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删除内循环。

答案 2 :(得分:2)

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

将所需数量(undefined == null) => true (null == null) => true (undefined === null) => false (null === null) => true (0 == null) => false (0 == undefined) => false (0 === null) => false (0 === undefined) => false (false == null) => false (false == undefined) => false (false === null) => false (false === undefined) => false (null) => false (undefined) => false (0) => false (false) => false 附加到每个单元格的末尾
<

然后您可以简单地重新排列每个单元格中的字符,以将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