2
votes

Comment diviser une chaîne en sous-chaînes de longueur n?

Comment diviser une chaîne en sous-tableaux de longueur n dans Matlab?

par exemple.

Entrée: "ABCDEFGHIJKL" , avec des sous-tableaux de longueur 3

Résultat: {ABC}, {DEF}, {GHI}, {JKL}


0 commentaires

3 Réponses :


4
votes

Cela devrait le faire :)

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


0 commentaires

4
votes

Si la longueur de la chaîne n'est pas un multiple de n , vous avez probablement besoin d'une boucle ou arrayfun :

result =
  1×4 cell array
    {'ABC'}    {'DEF'}    {'GHI'}    {'JK'}

Alternativement, accumarray peut également être utilisé:

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


2 commentaires

Merci beaucoup! Ceci est un article très détaillé et incroyable pour mon cas d'utilisation! J'apprécie ton aide :)


@ Snel12 Heureux de pouvoir aider :-)



4
votes

Une expression régulière peut faire le travail ici:

exp = '.{3}' %this will output {'abc'} {'def'} but no {'gh'}

qui donne:

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

Si vous ne voulez faire correspondre que le groupe de 3 char:

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')


1 commentaires

Bonne idée! Approche très propre