Matlab strcat功能与空间有关

sta*_*tor 30 matlab strcat

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

strcat('red ', 'yellow ', 'white ')
Run Code Online (Sandbox Code Playgroud)

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

nsa*_*ers 22

从strlab的matlab帮助页面:

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


gno*_*ice 22

尽管STRCAT忽略了尾随的空白区域,但它仍然保留了前导空白区域.试试这个:

strcat('red',' yellow',' white')
Run Code Online (Sandbox Code Playgroud)

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

['red ' 'yellow ' 'white ']
Run Code Online (Sandbox Code Playgroud)


小智 14

实际上,您可以简单地使用空间的ASCII代码:32.因此,您可以像这样解决问题:

str = strcat('red', 32, 'yellow', 32, 'white');
Run Code Online (Sandbox Code Playgroud)

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

  • 哇,这很有趣,即使`strcat('red','','yellow','','white')`删除空格...... (2认同)

And*_*nke 11

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

str = strcat({'red '}, {'yellow '}, {'white '})
str = str{1}
Run Code Online (Sandbox Code Playgroud)

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

strs = strcat( {'my '}, {'red ','yellow ','white '}, 'shirt' )
Run Code Online (Sandbox Code Playgroud)

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

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