Matlab strcat功能与空间有关

时间:2009-09-15 05:13:07

标签: matlab strcat

我正在努力实现这个目标:

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

我希望看到“红黄白”,但是,我在命令输出中看到“redyellowwhite”。需要做些什么来确保空间连接正确?提前谢谢。

5 个答案:

答案 0 :(得分:21)

来自strcat的matlab帮助页面:

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

答案 1 :(得分:21)

虽然STRCAT忽略尾随空格,但它仍保留前导空格。试试这个:

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

或者,您可以使用连接语法:

['red ' 'yellow ' 'white ']

答案 2 :(得分:13)

事实上,你可以简单地使用空间的ASCII代码:32。所以,你可以解决这个问题:

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

然后你会得到str = 'red yellow white'

答案 3 :(得分:11)

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

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

在这个基本示例中不是很有用。但是如果你最终对字符串进行“矢量化”操作,那就很方便了。常规数组连接不执行strcat所做的1对多连接。

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

在单元格中粘贴'my'即使它是单个字符串也会保留空白。请注意,您必须使用{}表单而不是调用cellstr(),它本身会删除尾随空格。

这可能是因为Matlab有两种表示字符串列表的形式:作为一个celltr数组,其中所有空格都是重要的,并作为一个空白填充的二维char数组,每行被视为一个字符串,并且尾随空格被忽略。 celltr形式最像Java和C中的字符串;如果您有许多相似长度的字符串,那么2-D char形式可以提高内存效率。 Matlab的字符串操作函数在两个表示中是多态的,有时会表现出这样的差异。像'foo'这样的char字是2-D char形式的退化单字符串,Matlab的函数就是这样。

答案 4 :(得分:1)

或者你可以说:

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