【发布时间】:2012-04-07 05:40:12
【问题描述】:
我想创建一个循环遍历多个字符串,但在 Matlab 中无法这样做。
有效的是:
for i=1:3
if (i==1)
b='cow';
elseif (i==2)
b='dog';
else
b='cat';
end
disp(b);
end
结果是:
cow
dog
cat
但我想要的是看起来更优雅的东西:
for i=['cow','dog','cat']
disp (i);
end
并给出相同的结果。
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
它不起作用,因为值保留为单元格而不是字符串我收到错误消息:
???错误使用 ==> fprintf 函数未为“单元”输入定义。
*-我真的不需要fprintf,我只是用它来检查值是否正确。
**-ray_tracing 是我使用字符串值的代码
【问题讨论】:
-
加法中的问题只是语法。您需要使用花括号 -
test{1}- 从单元格中提取字符数组,而不是普通括号 -test(1)- 它只是选择数组中的第一个单元格,实际上在这里什么都不做。再次查看 Oli 的示例代码;请注意,他在i{1}中使用了花括号。 (另外,如果可以避免的话,不要使用全局变量。) -
你应该使用
SHADE_METHODE=shade{1};而不是SHADE_METHODE=shade(1);