web-dev-qa-db-fra.com

Matlab Strcat fonction des problèmes avec des espaces

J'essaie d'accomplir ceci:

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

Je m'attendais à voir "rouge jaune rouge", cependant, je vois "Redyellowwite" sur la sortie de la commande. Quel doit être fait pour que les espaces soient concatérés correctement? Merci d'avance.

29
stanigator

De la page d'aide MATLAB pour STRCAT:

"Strcat ignore la trailing ASCII caractères blancs et omet tous ces caractères de la sortie. Caractères d'espace blanc dans ASCII sont espace, nouvelle ligne, retour, onglet, Onglet verticale ou caractères de formulaire, qui renvoient toutes une réponse vraie de la fonction Matlab Isspace. Utilisez la syntaxe de la concaténation [S1 S2 S3 ...] pour préserver les espaces de fuite. Strcat n'ignore pas les entrées qui sont des tableaux de cordes cellulaires . "

21
nsanders

Bien que STRCAT Ignore Fonction Espace blanc, il conserve toujours Espace blanc . Essaye ça:

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

Sinon, vous pouvez simplement utiliser la syntaxe de la concaténation:

['red ' 'yellow ' 'white ']
21
gnovice

En fait, vous pouvez simplement utiliser le ASCII code de l'espace: 32. Donc, vous pouvez résoudre le problème comme celui-ci:

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

Ensuite, vous obtiendrez str = 'red yellow white'.

14
Kevin_Hu

Vous pouvez protéger les espaces suivants dans Strcat () ou des fonctions similaires en la mettant dans une cellule.

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

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

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

Coller 'My' dans une cellule, même si c'est une seule chaîne conservera la blancheur. Remarque Vous devez utiliser le formulaire {} au lieu d'appeler Cellstr (), qui se fera elle-même.

Tout cela est probablement parce que Matlab a deux formes de représentation des listes de chaînes: comme une matrice de cellules cellulaires, où tout blancheur est significatif et comme une matrice de caractères à 2 dimensions à 2 dimensions en blanc, avec chaque rangée traitée comme une corde et une espace de fuite ignorée . La forme cellulaire ressemble la plupart des chaînes de Java et c; le formulaire de caractère 2-D peut être plus efficace de mémoire si vous avez de nombreuses chaînes de longueur similaire. Les fonctions de manipulation de chaîne de Matlab sont polymorphes sur les deux représentations , et présentent parfois des différences comme celle-ci. Un chariot littéral comme "FOO" est un cas dégénéré à une cordon de la forme de charrette 2-D et les fonctions de Matlab le traitent comme telles.

11
Andrew Janke

ou vous pouvez dire:

str = sprintf('%s%s%s', 'red ', 'yellow ', 'white ')
1
Amro