for i=1:N f(i) = 'f'+i; end
donne une erreur dans MatLab. Quelle est la syntaxe correcte pour initialiser un tableau avec N chaînes du motif fi?
Il semble que même cela ne fonctionne pas:
for i=1:4 f(i) = 'f'; end
Vous pouvez concaténer des chaînes en utilisant strcat
. Si vous envisagez de concaténer des nombres en tant que chaînes, vous devez d’abord utiliser num2str
pour convertir les nombres en chaînes.
De même, les chaînes ne peuvent pas être stockées dans un vecteur ou une masortingce, donc f
doit être défini en tant que tableau de cellules et doit être indexé en utilisant {
et }
(au lieu des parenthèses rondes normales).
f = cell(N, 1); for i=1:N f{i} = strcat('f', num2str(i)); end
Une approche non-boucle facile serait d’utiliser genvarname
pour créer un tableau de cellules de chaînes:
>> N = 5; >> f = genvarname(repmat({'f'}, 1, N), 'f') f = 'f1' 'f2' 'f3' 'f4' 'f5'
La fonction genvarname
est obsolète, matlab.lang.makeUniqueSsortingngs
peut donc être utilisé de la manière suivante pour obtenir le même résultat:
>> N = 5; >> f = strrep(matlab.lang.makeUniqueSsortingngs(repmat({'f'}, 1, N), 'f'), '_', '') f = 1×5 cell array 'f1' 'f2' 'f3' 'f4' 'f5'
Permettez-moi d’append une autre solution:
>> N = 5; >> f = cellstr(num2str((1:N)', 'f%d')) f = 'f1' 'f2' 'f3' 'f4' 'f5'
Si N
comporte plus de deux chiffres ( >= 10
), vous obtiendrez des espaces supplémentaires. Ajoutez un appel à strsortingm(f)
pour vous en débarrasser.
En prime, il y a une fonction sprintfc
non documentée sprintfc
qui retourne bien une cellule de chaînes de caractères:
>> N = 10; >> f = sprintfc('f%d', 1:N) f = 'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
selon cela, il semble que vous devez définir “N” avant d’essayer de l’utiliser, et il semble que cela doive être une chaîne int pas? Je ne connais pas grand chose à MatLab, mais juste ce que j’ai recueilli sur ce site ..
Essayez ce qui suit:
for i = 1:4 result = strcat('f',int2str(i)); end
Si vous l’utilisez pour nommer plusieurs fichiers générés par votre code, vous pouvez concaténer davantage de parties au nom. Par exemple, avec l’extension à la fin et l’adresse au début:
filename = strcat('c:\...\name',int2str(i),'.png');
L’utilisation de sprintf
a déjà été proposée par ldueck dans un commentaire, mais je pense que cela vaut la peine de répondre:
f(i) = sprintf('f%d', i);
C’est à mon avis la solution la plus lisible et offre également une certaine souplesse (par exemple, lorsque vous souhaitez arrondir une valeur flottante, utilisez quelque chose comme %.2f
).