Подтвердить что ты не робот

Проблемы функции Matlab strcat с пробелами

Я пытаюсь выполнить это:

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

Я ожидал увидеть "красный желтый белый", однако я вижу "redyellowwhite" на выходе команды. Что нужно сделать для обеспечения правильного сцепления пространств? Спасибо заранее.

4b9b3361

Ответ 1

На странице справки matlab для strcat:

"strcat игнорирует завершающие символы пробела ASCII и пропускает все такие символы из вывода. Символы пробела в ASCII - это пробел, символ новой строки, возврат каретки, вкладка, вкладка с вертикальной вкладкой или символы формы, все из которых возвращают true ответ от функции MATLAB isspace. Используйте синтаксис конкатенации [s1 s2 s3...] для сохранения конечных пробелов. strcat не игнорирует входы, которые являются массивами ячеек строк."

Ответ 2

Хотя STRCAT игнорирует конечное пробел, он по-прежнему сохраняет ведущее белое пространство. Попробуйте следующее:

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

В качестве альтернативы вы можете просто использовать синтаксис конкатенации:

['red ' 'yellow ' 'white ']

Ответ 3

Фактически, вы можете просто использовать код пространства ASCII: 32. Итак, вы можете решить проблему следующим образом:

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

Затем вы получите str = 'red yellow white'.

Ответ 4

Вы можете защитить конечные пробелы в 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; форма 2-D char может быть более эффективной с точки зрения памяти, если у вас много строк одинаковой длины. Функции манипуляции со строками Matlab являются полиморфными по двум представлениям и иногда проявляют различия, подобные этому. Литерал char, подобный 'foo', является вырожденным однострочным случаем формы 2-D char, а функции Matlab рассматривают его как таковой.

Ответ 5

или вы можете сказать:

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