forelab循环使用Matlab中的字符串

SIM*_*MEL 10 foreach matlab

我想创建一个迭代几个字符串的循环,但在Matlab中无法这样做.

有效的是:

for i=1:3
  if (i==1)
    b='cow';
  elseif (i==2)
    b='dog';
  else
    b='cat';
  end

  disp(b);
end
Run Code Online (Sandbox Code Playgroud)

结果是:

cow
dog
cat
Run Code Online (Sandbox Code Playgroud)

但我想要的是更优雅的东西,看起来像:

for i=['cow','dog','cat']
  disp (i);
end
Run Code Online (Sandbox Code Playgroud)

并给出相同的结果.

Matlab中有选项可以做到这一点吗?

加成:

我稍后需要使用单词作为字符串来使用而不仅仅是显示(disp仅作为示例).我试图在我的真实程序中使用单元格数组:

clear all;
close all;
clc;

global fp_a
global TEST_TYPE
global SHADE_METHODE

for fp_a=11:24
for shade={'full','fast'}
    SHADE_METHODE=shade(1);
    for test={'bunny','city'}
        TEST_MODE=test(1);
        fprintf ('fp_a:%d | test: %s | shade: %s',fp_a,TEST_TYPE,SHADE_METHODE);
        ray_tracing;
    end
end
end
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为值保持为单元格而不是字符串我收到错误消息:

??? 使用==> fprintf时出错没有为'cell'输入定义函数.

* - 我真的不需要fprintf我只是用它来检查值是否正确.

** - ray_tracing是我使用字符串值的代码

Oli*_*Oli 30

或者你可以这样做:

for i={'cow','dog','cat'}
   disp(i{1})
end
Run Code Online (Sandbox Code Playgroud)

结果:

cow
dog
cat
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.如果只有在Matlab中编写的每一个非常好的东西都没有被真正可怕的东西所抵消. (6认同)

AE4*_*082 6

您的问题可能是由MATLAB处理字符串的方式引起的.MATLAB字符串只是字符数组.当你调用时['cow','dog','cat'],你正在形成,'cowdogcat'因为[]连接数组没有任何嵌套.如果您想要嵌套行为,可以使用使用构建的单元格数组{}.for迭代右侧的列.这意味着你可以使用上面提到的习语; 奥利已经提供了解决方案.这个成语也是展示普通数组和单元数组之间差异的好方法.

%Cell array providing the correct solution
for word = {'cow','dog','cat'}
    disp(word{1}) %word is bound to a 1x1 cell array. This extracts its contents.
end

cow
dog
cat


%Normal array providing weirdness
for word = ['cow','dog','cat'] %Same as word = 'cowdogcat'
    disp(word) %No need to extract content
end

c
o
w
d
o
g
c
a
t
Run Code Online (Sandbox Code Playgroud)