我正在努力做到这一点:
strcat('red ', 'yellow ', 'white ')
我希望看到“redyellowwhite”,但是,我在命令输出中看到了“redyellowwhite”。需要做什么来确保正确连接空间?提前致谢。
从 strcat 的 matlab 帮助页面:
“strcat 忽略尾随 ASCII 空白字符并从输出中省略所有此类字符。ASCII 中的空白字符是空格、换行符、回车符、制表符、垂直制表符或换页符,所有这些都从MATLAB isspace 函数。使用连接语法 [s1 s2 s3 ...] 保留尾随空格。strcat 不会忽略作为字符串元胞数组的输入。”
尽管STRCAT忽略尾随空格,但它仍保留前导空格。试试这个:
strcat('red',' yellow',' white')
或者,您可以只使用连接语法:
['red ' 'yellow ' 'white ']
事实上,你可以简单地使用空格的ASCII码:32。所以,你可以这样解决这个问题:
str = strcat('red', 32, 'yellow', 32, 'white');
然后你会得到str = 'red yellow white'
.
您可以通过将其放在单元格中来保护 strcat() 或类似函数中的尾随空格。
str = strcat({'red '}, {'yellow '}, {'white '})
str = str{1}
在这个基本示例中不是很有用。但是,如果你最终对字符串进行“矢量化”操作,它就很方便了。常规数组连接不会像 strcat 那样进行一对多连接。
strs = strcat( {'my '}, {'red ','yellow ','white '}, 'shirt' )
将 'my ' 粘贴在单元格中,即使它是单个字符串也会保留空格。请注意,您必须使用 {} 形式而不是调用 cellstr(),它本身会去除尾随空格。
这很可能是因为 Matlab 有两种表示字符串列表的形式:作为 cellstr 数组,其中所有空格都很重要,以及作为空白填充的二维 char 数组,每一行都被视为字符串,尾随空格被忽略. cellstr 形式最类似于 Java 和 C 中的字符串;如果您有许多长度相似的字符串,则 2-D char 形式的内存效率更高。Matlab 的字符串操作函数在这两种表示上是多态的,有时会表现出这样的差异。像 'foo' 这样的 char 文字是二维 char 形式的退化单字符串情况,Matlab 的函数就是这样处理的。
或者你可以说:
str = sprintf('%s%s%s', 'red ', 'yellow ', 'white ')