2012-05-21 16 views
18

MATLABの文字列のリストを反復しようとしています。問題は、 'for'ループの中で、私のイテレータは文字列ではなく 'セル'とみなされることです。MATLABの文字列のリストを反復する

for str = {'aaa','bbb'} 
    fprintf('%s\n',str); 
end 

??? Error using ==> fprintf 
Function is not defined for 'cell' inputs. 

これを修正するにはどのような正しい方法がありますか?

+2

これは、MATLABのデザインの概念バグであるならば、私は疑問に思います。なぜこれはこのように構築されていますか? – Memming

+0

@Memming Nope。 'printf'ファミリの関数を使用する方法がわからない人でも、 – KitsuneYMG

答えて

22

次のようにあなたはそれが正しい作るためにstr{1}を介して細胞のコンテンツを呼び出す必要があります:

for str = {'aaa','bbb'} 
    fprintf('%s\n',str{1}); 
end 

はここで、セルアレイの印刷内容にmore sophisticated exampleです。

+2

' char(str) 'も動作します。ループが変更されてstrがa cell – tmpearce

+1

これは、文字列のセル配列を扱うたびに、これは本当に気になります。 str {1}を呼び出さずに直接セルの内容を取得するために、文字列のセル配列を反復処理するよりエレガントな方法はありませんか? - 編集 - nevermind、ただ見つかった:http://stackoverflow.com/questions/16587564/can-the-s1-annoyance-when-iterating-over-a-cell-array-be-avoided – rich

6
str={'aaa','bbb'}; 
fprintf('%s\n',str{:}); 

forループが不要です。

EDIT: 参照:cellfun

+1

@petrichor私は現時点では生活のためのコードをMATLAB。私は 'cellfun'とこのような繰り返し呼び出しで深くぶつかっている。私はまた、MATLABについての真のルールを学びました:決してループを使用しないでください。 'repmat'、' permute'、 'reshape'の酷い混乱さえも反復よりも速いです。 – KitsuneYMG

関連する問題