【问题标题】:Question about Matlab: passing strings as split parameters to function关于matlab的问题:将字符串作为分割参数传递给函数
【发布时间】:2011-05-12 11:06:23
【问题描述】:

你好, 我有以下问题: 我在 matlab 中有一个字符串:

str='foo bar'

我想用于某个命令:

mex(..., str)

这不起作用,因为 mex 将 str 处理为 ONE 参数(因此作为 mex(..., 'foo bar'))。如何做到这一点,matlab将其识别为这样的函数调用:

mex(..., 'foo', 'bar')

我没有在这个带有 2 个参数的示例中进行硬编码,它也可能会出现字符串扩展为 str='foo bar blupp' -> 作为 mex(..., 'foo', 'bar', 'blupp') 传递的时间。

谢谢!

【问题讨论】:

  • 好的,我现在自己做了如下操作:使用mex(..., 初始化一个变量,然后遍历str 中的所有单个参数并将它们附加到字符串中。比 eval 字符串作为命令!

标签: string function matlab


【解决方案1】:

使用strread 转换为元胞数组,然后使用{:} 索引将其展开回“逗号分隔列表”。

>> x = 'foo bar baz'
x =
foo bar baz
>> xc = strread( x, '%s' )
xc = 
    'foo'
    'bar'
    'baz'
>> fprintf( 'Hello: %s\n', xc{:} )
Hello: foo
Hello: bar
Hello: baz

最后一行完全等价于

fprintf( 'Hello: %s\n', 'foo', 'bar', 'baz' )

【讨论】:

  • 几乎总有办法避免“eval”。
  • 是的,你只需要知道如何。我不知道{:} 语法,也不知道如何搜索类似的东西。这是怎么命名的?因为即使在知道命令之后,我也想阅读它,但是在搜索 matlab {:} 时谷歌无法识别它
  • @Col Heather:您必须搜索术语“逗号分隔列表”,这应该可以让您找到this MATLAB documentation page
  • 好的,谢谢。并且只是为了将来在此线程主题上进行搜索:strread 将替换为 textscan -> mathworks.com/help/techdoc/ref/textscan.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 2020-12-19
  • 2017-04-25
  • 2012-07-26
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多