2016-08-03 94 views
1

非常簡單的問題,我想在for循環中用char創建一個數組。創建一個包含字符和增加數字的數組

代碼:

a = [1:5]; 
arr = []; 
for i = 1:length(a) 
    arr(i) = ['f_',num2str(i)] 
end 

我得到錯誤:

In an assignment A(I) = B, the number of elements in B and I must be the same. 

我要的是一個數組:

[f_1 f_2 f_3....] 

回答

3

這是因爲arr(i)是一個單一的元素,而['f:', num2str(i)]包含三個字符。另外,由於length(1)保證爲1,所以for i = 1:length(1)確實沒有意義。我想你想要for i = 1:length(a)。如果是這種情況,我建議你用代替numeli代替ii

更好的方式來創建要使用sprintf這樣的數組:

sprintf('f_%i\n',1:5) 
ans = 
f_1 
f_2 
f_3 
f_4 
f_5 

或者possiblby:我想這

sprintf('f_%i ',1:5)  
ans =  
f_1 f_2 f_3 f_4 f_5 

是你真正想要的東西:

for ii = 1:5 
    arr{ii} = ['f_', num2str(ii)]; 
end 
arr =  
    'f_1' 'f_2' 'f_3' 'f_4' 'f_5' 

或更簡單:

arr = arrayfun(@(n) sprintf('f_%i', n), 1:5, 'UniformOutput', false) 

最後兩個可以被索引如下:

arr{1}  
ans =  
f_1 

你也可以做(相同的結果):

str = sprintf('f_%i\n', 1:5); 
arr = strsplit(str(1:end-1), '\n') 

如果你這樣做是爲了創建變量名,那麼請別。改爲使用單元格或結構。

+0

對不起,輸入錯誤。我想寫'for i = 1:length(a)' – user5603723