Question

J'essaie d'accomplir ceci:

strcat('red ', 'yellow ', 'white ')

Je m'attendais à voir "rouge jaune blanc", cependant, je vois "redyellowwhite". sur la sortie de la commande. Que faut-il faire pour que les espaces soient correctement concaténés? Merci d'avance.

Était-ce utile?

La solution

À partir de la page d'aide de matlab pour strcat:

"strcat ignore les derniers caractères d’espace et les omet de la sortie. Les espaces blancs en ASCII sont des caractères d'espacement, de nouvelle ligne, de retour à la ligne, de tabulation, de tabulation verticale ou de saut de page, qui renvoient tous une réponse vraie à partir de la fonction MATLAB isspace. Utilisez la syntaxe de concaténation [s1 s2 s3 ...] pour conserver les espaces de fin. strcat n'ignore pas les entrées qui sont des tableaux de cellules de chaînes. "

Autres conseils

Bien que STRCAT ignore la fin espace blanc, il conserve toujours l’espace blanc qui précède. Essayez ceci:

strcat('red',' yellow',' white')

Vous pouvez également utiliser la syntaxe de concaténation:

['red ' 'yellow ' 'white ']

En fait, vous pouvez simplement utiliser le code d'espace ASCII: 32. Vous pouvez donc résoudre le problème de la manière suivante:

str = strcat('red', 32, 'yellow', 32, 'white');

Ensuite, vous obtiendrez str = 'rouge jaune blanc' .

Vous pouvez protéger les espaces blancs de fin dans strcat () ou des fonctions similaires en les plaçant dans une cellule.

str = strcat({'red '}, {'yellow '}, {'white '})
str = str{1}

Pas très utile dans cet exemple basique. Mais si vous finissez par faire " vectorisé " opérations sur les cordes, c'est pratique. La concaténation régulière de tableaux ne fait pas la concaténation 1 à plusieurs que strcat fait.

strs = strcat( {'my '}, {'red ','yellow ','white '}, 'shirt' )

Si vous collez "mon" dans une cellule, même si ce n'est qu'une seule chaîne, les espaces sont préservés. Notez que vous devez utiliser le formulaire {} au lieu d'appeler cellstr (), qui supprimera lui-même les espaces finaux.

Tout cela est probablement dû au fait que Matlab propose deux formes de représentation de listes de chaînes: un tableau de cellules, où tous les espaces sont significatifs, et un tableau de caractères à 2 dimensions complété par des blancs, chaque ligne étant traitée comme une chaîne, et espaces de fin ignorés. La forme cellstr ressemble le plus à des chaînes en Java et en C; la forme de caractère 2D peut être plus efficace en termes de mémoire si vous avez plusieurs chaînes de même longueur. Les fonctions de manipulation des chaînes de Matlab sont polymorphes sur les deux représentations et présentent parfois des différences de ce type. Un caractère littéral tel que 'foo' est un cas dégénéré d'une chaîne de la forme de caractère 2D, et les fonctions de Matlab le traitent comme tel.

ou vous pouvez dire:

str = sprintf('%s%s%s', 'red ', 'yellow ', 'white ')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top