Вы можете защитить конечные пробелы в strcat () или аналогичных функциях, поместив его в ячейку.
str = strcat({'red '}, {'yellow '}, {'white '})
str = str{1}
Не очень полезно в этом базовом примере. Но если в итоге вы выполняете «векторизованные» операции над строками, это удобно. Обычная конкатенация массивов не выполняет конкатенацию 1-ко-многим, что делает strcat.
strs = strcat( {'my '}, {'red ','yellow ','white '}, 'shirt' )
Вставка «my» в ячейку, даже если это одна строка, сохранит пробел. Обратите внимание, что вы должны использовать форму {} вместо вызова cellstr (), которая сама удалит конечные пробелы.
Возможно, это связано с тем, что Matlab имеет две формы представления списков строк: в виде массива cellstr, где все пробелы значимы, и в виде двумерного массива char с заполнением пробелом, каждая строка которого рассматривается как строка завершающий пробел игнорируется. Форма cellstr больше всего напоминает строки в Java и C; форма двумерного символа может быть более эффективной при использовании памяти, если у вас много строк одинаковой длины. Функции манипулирования строками в Matlab полиморфны в двух представлениях и иногда демонстрируют различия, подобные этой. Символьный литерал, такой как 'foo', является вырожденным однострочным регистром двумерной символьной формы, и функции Matlab обрабатывают его так.