2012-03-22 450 views
10

我想创建一个循环,它将遍历几个字符串,但无法在Matlab中完成。用Matlab中的字符串foreach循环

什么工作原理是:

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中有没有一个选项可以做到这一点?

ADDITION:

我需要以后的话作为字符串使用,而不只是显示(该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是我的代码,使用字符串

+2

加法中的问题只是语法。您需要使用花括号 - “test {1}” - 从单元格中提取char数组,而不是正常的括号 - test(1) - - 它只选择数组中的第一个单元格,在此无效。再次检查Oli的示例代码;注意他在'i {1}'中使用花括号。 (另外,如果可以避免使用全局变量,请不要使用全局变量。) – 2012-03-22 17:26:12

+0

您应该使用'SHADE_METHODE =阴影{1};'而不是'SHADE_METHODE =阴影(1);' – Oli 2012-03-22 18:32:52

+0

可能的重复[是否有MATLAB的foreach?如果是这样,如果基础数据发生变化,它的行为如何?](http://stackoverflow.com/questions/408080/is-there-a-foreach-in-matlab-if-so-how-does-it-behave -if-the-underlying-data-c) – 2013-08-02 20:12:42

回答

28

或者,你可以这样做:

for i={'cow','dog','cat'} 
    disp(i{1}) 
end 

结果:

cow 
dog 
cat 
+6

不错。如果在Matlab中编写每一个真正好的东西都不会被真正可怕的东西所抵消。 – beOn 2012-09-14 02:32:09

2

当然值!使用单元格数组来保存字符串(在普通数组中,字符串被认为是字符,如果所有字符串具有相同的长度,则可以工作,否则将以bork为单位)。

opts={'cow','dog','cat'} 
for i=1:length(opts) 
    disp(opts{i}) 
end 
5

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

%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 
相关问题