私はこれを達成しようとしています:
strcat('red ', 'yellow ', 'white ')
「red yellow white」が表示されると思っていましたが、コマンド出力に「redyellowwhite」が表示されます。スペースが適切に連結されるようにするために何をする必要がありますか? 前もって感謝します。
strcat の matlab ヘルプ ページから:
"strcat は、末尾の ASCII 空白文字を無視し、そのような文字をすべて出力から省略します。ASCII の空白文字は、スペース、改行、キャリッジ リターン、タブ、垂直タブ、またはフォーム フィード文字であり、これらはすべて、 MATLAB isspace 関数。連結構文 [s1 s2 s3 ...] を使用して、末尾のスペースを保持します。strcat は、文字列のセル配列である入力を無視しません。"
STRCATは末尾の空白を無視しますが、先頭の空白は保持します。これを試して:
strcat('red',' yellow',' white')
または、連結構文を使用することもできます。
['red ' 'yellow ' 'white ']
実際、スペースの ASCII コード 32 を使用するだけで済みます。したがって、この問題は次のように解決できます。
str = strcat('red', 32, 'yellow', 32, 'white');
それからあなたは得るでしょうstr = 'red yellow white'
。
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 の関数はそれをそのように扱います。
または次のように言うことができます。
str = sprintf('%s%s%s', 'red ', 'yellow ', 'white ')