2015-10-10 182 views

回答

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' 
+2

該死的,我正在研究一個正則表達式解決方案,但是你的工具速度更快!這是要走的路。 – thewaywewalk

+0

@thewaywewalk謝謝! –

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' 

它使用的事實,每一個進入你inputcell1xN字符數組,您可以訪問使用索引。只需在每個字母后附加<並存儲新字符串`。感謝@丹尼爾去除內部循環。

+1

基本上以正確的方式去。你可以使用'tmp2 = []; tmp2(1:2:numel(tmp)* 2)= tmp; tmp2(tmp2 == 0)='<''來移除內部循環,這對於長字符串來說可能更快。 – Daniel

+0

謝謝@Daniel將此添加到循環中。任何可以消除外環的方法也可以用例如'cellfun'左右? – Adriaan

+0

可能,但'cellfun'不會加速代碼,因此我沒有看到任何優勢。 – Daniel

2

這是另一種方式。您可以附加,你需要每個單元的一端與

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' 
相關問題