【问题标题】:Matlab Coder - Alternative for strcat functionMatlab Coder - strcat 函数的替代方案
【发布时间】:2014-05-26 01:52:52
【问题描述】:

目前 matlab 编码器不支持strcatstrjoin。有什么办法可以规避这个或自定义功能吗?

编辑: 输入= [a b c d] 预期输出 = 'a,b,c,d'

【问题讨论】:

  • [ and ] for strcat?
  • strjoin有什么用?示例命令?
  • @chappjc,strjoin 也连接字符串 str = strjoin(C,delimiter) matlab ref
  • @Daniel 对于strcat,它取决于输入。考虑strcat({'Red','Yellow'},{'Green','Blue'}),它给出'RedGreen' 'YellowBlue'

标签: string matlab matlab-coder codegen


【解决方案1】:

对于strjoin,您可能会选择sprintf

>> colorCell = [{'Red','Yellow'},{'Green','Blue'}];
>> colorList = strjoin(colorCell,',')
colorList =
Red,Yellow,Green,Blue
>> colorList = sprintf('%s,',colorCell{:}); colorList(end)=[]
colorList =
Red,Yellow,Green,Blue

如果你不能使用spintf:

>> c = [colorCell(:) repmat({','},numel(colorCell),1)].';
>> colorList = [c{:}]; colorList(end)=[]

对于strcat,简单的用法往往等同于使用[]

>> strcat(colorCell{:})
ans =
RedYellowGreenBlue
>> [colorCell{:}]
ans =
RedYellowGreenBlue

但是,对于更复杂的语法,就没有那么简单了:

>> strcat({'Red','Yellow'},{'Green','Blue'})
ans = 
    'RedGreen'    'YellowBlue'

您需要针对这种用法的解决方案吗?也许如下:

colorCell1 = {'Red','Yellow'}; colorCell2 = {'Green','Blue'};
colorCell12 = [colorCell1;colorCell2];
c = mat2cell(colorCell12,size(colorCell12,1),ones(size(colorCell12,2),1));
cellfun(@(x)[x{:}],c,'uni',0)

【讨论】:

  • 您的解决方案允许在不使用strjoin 的情况下连接字符串,但不幸的是编码器也不允许sprintf
  • Coder 不允许 cellfun(至少从 2015b 开始,我可以测试),因此该选项也为空...
猜你喜欢
  • 1970-01-01
  • 2021-10-07
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多