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 sous forme de chaînes, vous devez d’abord utiliser num2str
pour convertir les nombres en chaînes.
De plus, les chaînes ne peuvent pas être stockées dans un vecteur ou une matrice, donc f
doit être défini comme un tableau de cellules , et doit être indexé à l'aide de {
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 simple sans boucle consiste à 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, donc matlab.lang.makeUniqueStrings
peut être utilisé à la place pour obtenir le même résultat:
>> N = 5;
>> f = strrep(matlab.lang.makeUniqueStrings(repmat({'f'}, 1, N), 'f'), '_', '')
f =
1×5 cell array
'f1' 'f2' 'f3' 'f4' 'f5'
Permettez-moi d'ajouter une autre solution:
>> N = 5;
>> f = cellstr(num2str((1:N)', 'f%d'))
f =
'f1'
'f2'
'f3'
'f4'
'f5'
Si N
contient plus de deux chiffres (>= 10
), Vous commencerez à obtenir des espaces supplémentaires. Ajoutez un appel à strtrim(f)
pour vous en débarrasser.
En bonus, il y a une fonction intégrée non documentée sprintfc
qui retourne joliment un tableau de cellules de chaînes:
>> N = 10;
>> f = sprintfc('f%d', 1:N)
f =
'f1' 'f2' 'f3' 'f4' 'f5' 'f6' 'f7' 'f8' 'f9' 'f10'
L'utilisation de sprintf
a déjà été proposée par ldueck dans un commentaire, mais je pense que cela vaut la peine d'être une réponse:
f(i) = sprintf('f%d', i);
C’est à mon avis la solution la plus lisible et donne également une certaine souplesse à Nice (c’est-à-dire lorsque vous voulez arrondir une valeur de type float, utilisez quelque chose comme %.2f
).
selon this il semble que vous deviez définir "N" avant d'essayer de l'utiliser et il semble que ce doit être une chaîne int not? Je ne connais pas grand-chose de MatLab, mais ce que j’ai recueilli de ce site..hope ça aide :)
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 plus de parties dans le nom. Par exemple, avec l'extension à la fin et l'adresse au début:
filename = strcat('c:\...\name',int2str(i),'.png');