se pueden proteger contra las espacios en blanco en strcat() o similar funciones al ponerlo en una celda.
str = strcat({'red '}, {'yellow '}, {'white '})
str = str{1}
No es muy útil en este ejemplo básico. Pero si terminas haciendo operaciones "vectorizadas" en las cuerdas, es útil. La concatenación regular de matrices no hace la concatenación de 1 a muchos que hace strcat.
strs = strcat({'my '}, {'red ','yellow ','white '}, 'shirt')
Pegar 'mi' en una celda a pesar de que es una sola cadena conservará el espacio en blanco. Tenga en cuenta que debe usar el formulario {} en lugar de llamar a cellstr(), que a su vez eliminará el espacio en blanco al final.
Probablemente todo esto se debe a que Matlab tiene dos formas de representar listas de cadenas: como una matriz de celdas, donde todos los espacios en blanco son significativos y como una matriz de caracteres en dos dimensiones, con cada fila tratada como una cadena, y el espacio en blanco al final ignorado. La forma de celltr más se asemeja a cadenas en Java y C; la forma de charla 2-D puede ser más eficiente desde el punto de vista de la memoria si tiene muchas cadenas de longitud similar. Las funciones de manipulación de cadenas de Matlab son polimórficas en las dos representaciones, y algunas veces muestran diferencias como esta. Un literal char como 'foo' es un caso degenerado de una cadena de la forma de char 2-D, y las funciones de Matlab lo tratan como tal.
@ # $ @! # $ @! Otra inconsistencia entre Matlab y C.> :( –
Solución rápida: 'cstrcat (" he "," l "," lo ")', conserva los espacios. Fuente: http://stackoverflow.com/a/14025999/ 445131 –
¡Hay tantas decisiones idiotas de diseño en Matlab, pero no esperaba que algo tan simple como esto también fuera un problema! – houbysoft