web-dev-qa-db-ja.com

スペースに関するMatlab strcat関数のトラブル

私はこれを達成しようとしています:

strcat('red ', 'yellow ', 'white ')

「red yellow white」が表示されるはずですが、コマンド出力に「redyellowwhite」が表示されます。スペースが適切に連結されるようにするには、何をする必要がありますか?前もって感謝します。

29
stanigator

Strcatのmatlabヘルプページから:

"strcatは、末尾のASCII空白文字を無視し、そのような文字をすべて出力から除外します。ASCIIの空白文字は、スペース、改行、復帰、タブ、垂直タブ、またはフォームフィード文字。MATLABのisspace関数から真の応答が返されます。連結構文[s1 s2 s3 ...]を使用して、末尾のスペースを保持します。strcatは、文字列のセル配列である入力を無視しません」

21
nsanders

[〜#〜] strcat [〜#〜]trailingの空白を無視しますが、それでもleading空白。これを試して:

strcat('red',' yellow',' white')

または、連結構文を使用することもできます。

['red ' 'yellow ' 'white ']
21
gnovice

実際、単純にASCIIスペースのコード:32を使用できます。したがって、次のようにして問題を解決できます。

str = strcat('red', 32, 'yellow', 32, 'white');

次に、str = 'red yellow white'

14
Kevin_Hu

セルに配置することで、strcat()または同様の関数で末尾の空白を保護できます。

str = strcat({'red '}, {'yellow '}, {'white '})
str = str{1}

この基本的な例ではあまり役に立ちません。しかし、文字列に対して「ベクトル化された」操作を実行することになる場合は、便利です。通常の配列連結は、strcatが行う1対多連結を行いません。

strs = strcat( {'my '}, {'red ','yellow ','white '}, 'shirt' )

単一の文字列であっても「my」をセルに貼り付けると、空白が保持されます。 cellstr()を呼び出す代わりに{}形式を使用する必要があることに注意してください。これにより、末尾の空白が削除されます。

これはおそらく、Matlabが文字列のリストを表す2つの形式を持っているためです。すべての空白が重要なcellstr配列として、および各行が文字列として扱われ、末尾の空白は無視される、空白が埋め込まれた2次元のchar配列として。 。 cellstrの形式は、JavaおよびCの文字列に最も似ています。2次元のcharの形式は、類似した長さの文字列が多数ある場合、メモリ効率が向上します。Matlabの文字列操作関数は、2つの表現で多態的です、およびこのような違いを示す場合があります。「foo」などのcharリテラルは、2次元char形式の1文字列の縮退ケースであり、Matlabの関数はそれをそのように扱います。

11
Andrew Janke

またはあなたは言うことができます:

str = sprintf('%s%s%s', 'red ', 'yellow ', 'white ')
1
Amro