我想创建一个迭代几个字符串的循环,但在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处理字符串的方式引起的.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)