Matlab:将字符串的单元格数组分成2个独立的单元格数组

时间:2013-12-05 18:41:05

标签: matlab

我有以下单元格数组:

MyArray = {'12345'; '67890'; '12345'}

我想创建两个新的单元格数组,其中包含上述数组的“拆分”版本。特别是,我希望一个单元格数组(MyArray2)包含每个元素的前3个字符,第二个单元格数组(MyArray3)包含每个元素的最后2个字符:

MyArray2 = {'123'; '678'; '123'}
MyArray3 = {'45'; '90'; '45'}

是否存在某种“反向”strcat功能?

2 个答案:

答案 0 :(得分:1)

这取决于你想要如何分割它。对于您的情况(在使用方括号编辑之前),这很容易:

A = ['12345'; '67890'; '12345']

B = A(:,1:3)
C = A(:,4:end)

对于更复杂的情况,请查看strsplit(一个非常新的功能,否则可在文件交换中使用)


实际上你提到你有一个单元格数组,如果你的字符串有不同的长度,那就有点棘手了。请查看cellfun documentation

days = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'};

abbrev = cellfun(@(x) x(1:3), days, 'UniformOutput', false)

语法@(x)创建一个匿名函数。此代码返回

abbrev = 
    'Mon'    'Tue'    'Wed'    'Thu'    'Fri'

因此:

A = {'12345'; '67890'; '12345'}

B = cellfun(@(x) x(1:3), A, 'UniformOutput', false)
C = cellfun(@(x) x(4:5), A, 'UniformOutput', false)

B = 

    '123'
    '678'
    '123'


C = 

    '45'
    '90'
    '45'

答案 1 :(得分:0)

这个怎么样?

sol = mat2cell(cell2mat(MyArray),ones(1,numel(MyArray)),[3 2]);

您想要的结果是sol(:,1)sol(:,2)

>> sol(:,1)

ans = 

    '123'
    '678'
    '123'

>> sol(:,2)

ans = 

    '45'
    '90'
    '45'