Как разбить строку на подстроки длины n? - PullRequest
2 голосов
/ 08 мая 2019

Как бы я разбил строку на подмассивы длины n в Matlab?

например.

Ввод: "ABCDEFGHIJKL", с вложенными массивами длиной 3

Выход: {ABC}, {DEF}, {GHI}, {JKL}

Ответы [ 3 ]

4 голосов
/ 08 мая 2019

Если длина строки не кратна n, вам, вероятно, необходим цикл или arrayfun:

x = 'ABCDEFGHIJK'; % length 11
n = 3;
result = arrayfun(@(k) x(k:min(k+n-1, end)), 1:n:numel(x), 'UniformOutput', false)

В качестве альтернативы можно использовать accumarray:

x = 'ABCDEFGHIJK';
n = 3;
result = accumarray(floor((0:numel(x)-1).'/n)+1, x, [], @(t) {t.'}).';

Любой из вышеперечисленных дает, в этом примере,

result =
  1×4 cell array
    {'ABC'}    {'DEF'}    {'GHI'}    {'JK'}
4 голосов
/ 08 мая 2019

Регулярное выражение может сделать работу здесь:

str = 'abcdefgh'
exp = '.{1,3}' %the regular expression (get all the group of 3 char, if number of char left < 3, take the rest)
res = regexp(str,exp,'match')

которые дают:

res =
  1×3 cell array
    {'abc'}    {'def'}    {'gh'}

Если вы хотите сопоставить группу из 3 символов:

exp = '.{3}' %this will output {'abc'} {'def'} but no {'gh'}
4 голосов
/ 08 мая 2019

Это должно сделать это:)

string = cellstr(reshape(string, 3, [])')
...