代码之家  ›  专栏  ›  技术社区  ›  stanigator

matlab strcat函数空间问题

  •  28
  • stanigator  · 技术社区  · 15 年前

    我正在努力做到这一点:

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

    我期望看到“红黄白”,但是,我在命令输出上看到“红黄白”。需要做什么来确保空间正确连接?事先谢谢。

    5 回复  |  直到 13 年前
        1
  •  21
  •   nsanders    15 年前

    从strcat的matlab帮助页面:

    “strcat忽略尾随的ASCII空白字符,并从输出中省略所有此类字符。ASCII中的空白字符是空格、换行符、回车符、制表符、竖排制表符或换行符,所有这些字符都从matlab isspace函数返回真正的响应。使用串联语法[s1 s2 s3…]保留尾随空格。strcat不会忽略作为字符串单元格数组的输入。”

        2
  •  21
  •   gnovice    15 年前

    虽然 STRCAT 忽视 拖尾 空白,它仍然保留 主要的 白色空间。试试这个:

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

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

    ['red ' 'yellow ' 'white ']
    
        3
  •  13
  •   Jonas Heidelberg liori    13 年前

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

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

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

        4
  •  11
  •   Andrew Janke    15 年前

    您可以将strcat()或类似函数中的尾随空格放在一个单元格中,从而对其进行保护。

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

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

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

    将'my'插入一个单元格,即使它是一个字符串,也会保留空白。注意,您必须使用表单,而不是调用cellstr(),它本身会去掉后面的空白。

    这可能是因为matlab有两种表示字符串列表的形式:一种是cellstr数组,其中所有空格都是有效的;另一种是空白填充的二维char数组,其中每一行都被视为字符串,后面的空格被忽略。CysRT形式最类似于爪哇和C中的字符串;如果有许多相似长度的字符串,则2-D字符形式可以更有效地存储。Matlab的字符串操作函数在这两种表示形式上是多态的,有时会表现出这样的差异。像'foo'这样的char文本是2-d char形式的退化单字符串形式,Matlab的函数也将其视为退化单字符串形式。

        5
  •  1
  •   Amro    15 年前

    或者你可以说:

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