Matlab strcat函数出现空格问题

Matlab strcat function troubles with spaces

我正在尝试实现以下目标:

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

我期望看到"红色黄色白色",但是,我在命令输出上看到" redyellowwhite "。需要采取什么措施来确保正确地连接空间?预先感谢。


尽管STRCAT忽略尾随空白,但仍保留前导空白。试试这个:

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

或者,您可以只使用串联语法:

1
['red ' 'yellow ' 'white ']

从matlab帮助页面获取strcat:

" strcat忽略结尾的ASCII空格字符,并从输出中忽略所有这些字符。ASCII的空格字符是空格,换行符,回车符,制表符,垂直制表符或换页符,所有这些都返回true来自MATLAB isspace函数的响应。使用串联语法[s1 s2 s3 ...]保留尾随空格。strcat不会忽略作为字符串单元格数组的输入。"


实际上,您可以简单地使用以下空格的ASCII代码:32。因此,您可以解决以下问题:

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

然后您将得到str = 'red yellow white'


您可以通过将strcat()或类似函数中的结尾空格放在单元格中来保护它。

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

在这个基本示例中不是很有用。但是,如果最后对字符串执行"向量化"操作,则非常方便。常规数组串联不像strcat那样进行一对多串联。

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

在单元格中标记" my",即使它是单个字符串也可以保留空格。请注意,您必须使用{}形式而不是调用cellstr(),它本身会剥离尾随空白。

这可能是因为Matlab有两种形式的代表字符串列表的形式:一个为cellstr数组,其中所有空格都是有效的;另一个为空白填充的二维char数组,其中每一行都视为字符串;以及尾随空白被忽略。 cellstr的形式最类似于Java和C中的字符串。如果您有许多长度相似的字符串,则二维字符形式可以提高内存效率。 Matlab的字符串操作函数在两种表示形式上都是多态的,有时会表现出这样的差异。像'foo'这样的char文字是二维char形式的简并的一串大小写,Matlab的函数将其视为此类。


或者您可以说:

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