2016-09-14 3 views
3

Почему strcat() с единственным аргументом не может обрезать конечные пробелы?Octave - strcat() не обрезание конечных пробелов при вызове одним аргументом

Я пытаюсь использовать strcat(), чтобы обрезать конечные пробелы из массива символов:

s = "cheese "; 
s = strcat(s); 

но это возвращает s = "cheese ", то есть никаких изменений в пробельных. Если я добавлю второй аргумент в strcat(), например s = strcat(s, "");, теперь s = "cheese".

Я делаю это так, а не вызываю strtrim(), потому что это явно, как учебник zyBooks хочет, чтобы мы выполнили эту задачу для одной строки - их примеры показывают, что strcat() используется таким образом , Что я не замечаю?

+0

Похоже, что это ожидаемое поведение [как указано в ссылке] (http://octave.sourceforge.net/octave/function/strcat.html). Интересно, почему плохо использовать 'strtrim (s)' как функцию для этого. –

+0

Я не уверен в последнем; они вообще не упоминают об этом. Что касается первого, то где он указывает, что конечные пробелы для одной строки ячейки сохраняются? Подразумевается ли это, что «Прослеживание пробела для ввода любой символьной строки устраняется до того, как строки конкатенированы»? – apraetor

+0

'strcat' ведет себя по-разному в Matlab и в Octave. Цель 'strcat' - конкатенация (не обрезка). – Rotem

ответ

2

Ваш код удаляет конечные пробелы в Matlab, но не в Octave. Иногда это происходит: функции Octave работают более или менее как Matlab, но с некоторыми отличиями. Иногда эти различия неопровержимы, иногда это не так.

В этом случае, я думаю, что поведение вы столкнулись ошибка в функции Octave, потому что его documentation говорит

Скользящими белое пространство для любого ввода строки символов устраняются до того, как строки объединяются.

который не является тем, что он делает, когда в качестве входных данных имеется одна строка.

+0

На самом деле, при ближайшем рассмотрении (и ясности задним числом), я думаю, автор документации знал, что они имели в виду, но не дал понять: они написали «strcat (s1, s2, ...)», где в документах Matlab оно отображается как «strcat (s1, ...)». Спасибо за ответ. – apraetor

+0

Если вы можете подтвердить, что 'strcat ('foo')' возвращает '' foo'' в matlab, вы должны указать bugreport на саванне http://savannah.gnu.org/bugs/?func = additem & group = октава Пожалуйста, используйте группу товаров «Совместимость Matlab». Спасибо – Andy

+0

@ Andy Да, я могу подтвердить это (проверено на Matlab R2015b). apraetor, можете ли вы загрузить bugreport (если вы видите, что он подходит)? –

0

This Bug was reported on savannah и fixed on the default branch несколько часов спустя.

Вы можете дождаться следующего выпуска, который включает это изменение, или просто загрузить strcat.m from the mercurial repo и заменить strcat.m в вашей установке Octave.

+0

Все мои первые подлинные ошибки! Теперь мне жаль, что я не прыгнул с пистолета на ответы! (ссылка на ветку по умолчанию для меня не работает) – apraetor

+0

Похоже, что на сервере gnu (http://hg.sv.gnu.org/hgweb/) в настоящее время есть некоторые проблемы ... Попробуйте еще раз через несколько часов – Andy

Смежные вопросы