2016-06-23 73 views
4

私は、数値、文字列などのセル配列を持っている:MATLABでは、セル配列の各文字列の先頭に文字列を挿入するにはどうすればよいですか?

labels = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'} 

配列が巨大であるように私は、ループの任意の種類を使用せずに、各配列要素の先頭に文字列('Label ')を追加しようとしていると私はすぐに実行するためのコードが必要です。私のもう1つの要件は、単語'Label'が配列の2桁の要素に適用された後は、その領域を維持する必要があるということです。私が欲しい結果は次のとおりです。

fullLabels = {'Label 1', 'Label 2', 'Label 3', 'Label 4', 'Label 5', 
       'Label 6', 'Label 7', 'Label 8', 'Label 9', 'Label 10', 
       'Label 11', 'Label 12'} 

私はこのようなstrcat()を使用してみました:

fullLabels = strcat('Label ', labels); 

これは一桁の配列要素の罰金ですが、2桁の配列要素に適用された場合、'Label'後空間物を除去する。

fullLabels = {..., 'Label10', 'Label11', 'Label12'} 

答えて

2

strcatトリム前連結にすべての入力から空白を末尾。 []を使用して文字列を手動で連結する必要があります。

fullLabels = cellfun(@(x)['Label ', x], labels, 'UniformOutput', false) 

% 'Label 1' 
% 'Label 2' 
% 'Label 3' 
% 'Label 4' 
% 'Label 5' 
% 'Label 6' 
% 'Label 7' 
% 'Label 8' 
% 'Label 9' 
% 'Label 10' 
% 'Label 11' 
% 'Label 12' 

regexprepのように、ラベルの前に付けることもできます。これにより、各ラベルの最初の文字が、'Label 'が前面に付加されたそれ自体(\1)に置き換えられます。

fullLabels = regexprep(labels, '^.', 'Label \1') 

更新

のDev-iLのの答え@私は認識していないだったstrcatにスペースを渡すためにセル配列を使用して言及しました。スペースを連結するのではなく、'Label 'の中にのセルを貼り付けることもできます。 strcat以来

strcat({'Label '}, labels) 
+0

パーフェクト!ありがとう@Suever。私は自分のデータで両方を試してみて、最も速く行くつもりです。とにかく時間差は無視できると思う。 – humbleHacker

2

だけが(「適切な数字」からそれらを変換し何の設定を使用して)スペースで開始するためにあなたの番号の文字列を取得するために管理している場合、あなたはこの問題は見られません、末尾スペースを削除:

labels = {' 1', ' 2', ' 3', ' 4', ' 5', ' 6', ' 7', ' 8', ' 9', ' 10', ' 11', ' 12'}; 
fullLabels = strcat('Label',labels); 

また、here述べたように、あなたはセルで空間を囲むことにより、strcatを "だます" ことができます。

fullLabels = strcat('Label', {' '}, labels); 
+0

私は、この答えの最初の部分は実際には完全ではないと言います。場所を確保する方法を示唆していないからです。しかし、私は第二の選択肢が最も読みやすい解決策だと考えています。 –

+0

@DennisJaheruddin - 第1の解決策について:数字のベクトルを必要な形式(主に 'sprintf'と' num2str')を持つ文字列のセル配列に変換する方法はさまざまですが、これは私はそれを可能性として指摘しただけです(もちろん、該当する場合に使用される)。 –

+0

@ Dev-iLあなたはそれを行うことができるか分からなかった(+1)。そのことを踏まえて、最初の入力として '{'Label'} 'を使用した私の回答へのアップデートを投稿しました。賢い – Suever

関連する問題