How to concatenate string vectors of unequal length?

If I have thee vectors v1 = {'a' 'b' 'c'}', v2 = {'d'}' and v3 = {'e' 'f'}', how do I create a four vector v4 =
'a' 'd' 'e'
'b' '' 'f'
'c' '' ''
?

1 Comment

Actually this is concatenating cell arrays of unequal lengths... the fact that these contain strings is totally irrelevant to both the question and the answer. The title should be "How to concatenate cell vectors of unequal length?"

Sign in to comment.

 Accepted Answer

Try this:
% Define component cell arrays.
v1 = {'a'; 'b'; 'c'}
v2 = {'d'}
v3 = {'e'; 'f'}
% Find out how big cell array needs to be.
lv1 = length(v1);
lv2 = length(v2);
lv3 = length(v3);
rows = max([lv1,lv2,lv3])
% Instatiate cell array of the max size.
v4 = cell(rows, 3)
% stuff each column in.
v4(1:lv1, 1) = v1;
v4(1:lv2, 2) = v2;
v4(1:lv3, 3) = v3;
% Print out results
fprintf('\n\nHere is the output cell array:\n');
v4
In the command window:
Here is the output cell array:
v4 =
'a' 'd' 'e'
'b' [] 'f'
'c' [] []

More Answers (3)

v1 = {'a' 'b' 'c'}',
v2 = {'d'}'
v3 = {'e' 'f'}'
v=cell(3,3)
v(:,:)={' '}
v(1:3,1)=v1
v(1,2)=v2
v(1:2,3)=v3
v1 = {'a' 'b' 'c'}';
v2 = {'d'}';
v3 = {'e' 'f'}';
m = max([numel(v1) numel(v2) numel(v3)]);
if numel(v1) < m, v1{m} = []; end
if numel(v2) < m, v2{m} = []; end
if numel(v3) < m, v3{m} = []; end
M = [v1 v2' v3]';
X = M(:);
v1 = {'a' 'b' 'c'}';
v2 = {'d'}';
v3 = {'e' 'f'}';
Lv1 = length(v1); Lv2 = length(v2); Lv3 = length(v3);
n = max([Lv1 Lv2 Lv3]);
v1cell = [v1; cell(n-Lv1,1)];
v2cell = [v2; cell(n-Lv2,1)];
v3cell = [v3; cell(n-Lv3,1)];
v4 = [v1cell v2cell v3cell];

Categories

Asked:

on 20 Dec 2014

Edited:

on 2 Jan 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!