2012-03-22 81 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 
相關問題