Cell array help with strings

1 Ansicht (letzte 30 Tage)
Maddie Long
Maddie Long am 18 Feb. 2020
Bearbeitet: Stephen23 am 19 Feb. 2020
I am trying to write several rows of a cell array into one box of a new cell array.
x = {('Q');('N');('Q');('New');('Q');('N');('Q');}
I need to output a cellarray that has all the Q's and when it reaches 'New' it goes to the next row so the output looks like this:
y = {('Q Q' ; 'Q Q'}
As of right now I have this:
x = {('Q');('N');('Q');('New');('Q');('N');('Q');}
q = string(x);
% T = table()
c = {};
for i = 1:numel(x)
if strcmp(q(i),'Q') || strcmp(q(i),'L')
c = {strjoin(q(i),' ')}
else strcmp(q(i),'New')
end
end
A good point to touch on is that the x array will not be periodic always.

Akzeptierte Antwort

Jacob Wood
Jacob Wood am 18 Feb. 2020
One way this could be accomplished is by tracking what cell you are currently looking to write into, and then increasing this "current_cell" every time you see a 'New'. My implementation would look something like:
x = {('Q');('N');('Q');('New');('Q');('N');('Q');};
c = {};
current_cell = 1;
for i = 1:numel(x)
if (strcmp(x{i},'Q') || strcmp(x{i},'L')) && numel(c)<current_cell %meaning this would be the first element in the cell, so we don't need to put a space in front
c{current_cell} = x{i};
elseif strcmp(x{i},'Q') || strcmp(x{i},'L')
c{current_cell} = strjoin({c{current_cell},x{i}}); %strjoin puts the space in for us
elseif strcmp(x{i},'New')
current_cell = current_cell+1;
end
end
  1 Kommentar
Maddie Long
Maddie Long am 18 Feb. 2020
You are a literal godsent human. Thank you so much!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Stephen23
Stephen23 am 18 Feb. 2020
Bearbeitet: Stephen23 am 19 Feb. 2020
>> x = {'Q';'N';'Q';'New';'Q';'N';'Q'};
>> y = 1+cumsum(strcmpi(x,'new'));
>> z = strcmpi(x,'Q') | strcmpi(x,'L');
>> foo = @(v){strjoin(x(v))};
>> out = accumarray(y(z),find(z),[],foo)
out =
'Q Q'
'Q Q'
Or for MATLAB versions before R2013a:
>> baz = @(s)s(2:end);
>> foo = @(v){baz(sprintf(' %s',x{v}))};
>> out = accumarray(y(z),find(z),[],foo)
out =
'Q Q'
'Q Q'

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by