我正在努力实现这个目标:
strcat('red ', 'yellow ', 'white ')
我希望看到“红黄白”,但是,我在命令输出中看到“redyellowwhite”。需要做些什么来确保空间连接正确?提前谢谢。
答案 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 ')