MATLAB Answers


why is a blank ignored in strcat

Asked by Ross
on 15 Oct 2013
Latest activity Commented on by Jos (10584)
on 15 Oct 2013
Accepted Answer by Jan
as an example, the following code:
strcat(num2str(1,'%02.0f'), '-', num2str(2), ' ', num2str(3), ':', num2str(4,'% 2.0f'))
whereas I want:
01-2 3: 4
Seems pretty simple but ... would someone help please?


Sign in to comment.


3 Answers

Answer by Jan
on 15 Oct 2013
Edited by Jan
on 15 Oct 2013
 Accepted Answer

'% 2.0f' adds a leading space on demand only, so you want: ' %2.0f'.
But this would be nicer, faster and less confusing:
sprintf('%02.0f-%d %d: % 2.0f', 1, 2, 3, 4)
To get around this ugly space gimmicks, which come from the backward compatibility to times before cell strings have been invented, I'm using a dedicated function to join strings: FEX: CStrCatStr. But this is designed for cell strings and for strings horzcat works sufficiently without deleting spaces smartly.


Sign in to comment.

Answer by Friedrich
on 15 Oct 2013

the doc states:
"For character array inputs, strcat removes trailing ASCII white-space characters: space, tab, vertical tab, newline, carriage return, and form-feed. For cell array inputs, strcat does not remove trailing white space."
So you can use:
strcat({num2str(1,'%02.0f')}, {'-'},{num2str(2)}, {' '}, {num2str(3)}, {':'}, {num2str(4,'% 2.0f')})
or dont use strcat and use []:
[num2str(1,'%02.0f'), '-', num2str(2), ' ', num2str(3), ':', num2str(4,'% 2.0f')]


Show 1 older comment
@Ross: I'm not understanding why you want these crazy complicated ways when the sprintf() Jan suggested is so much more simpler and reliable. I always use sprintf() since I found out what you're finding out now. I suggest you follow Jan's and my recommendations to use sprintf and avoid these problems and simplify your code.
I was talking to Ross. I know Frederich knows both methods and I agree with you about why Frederich answered that way. I was trying to point Ross towards the method that I find gives me much more control with much less complicated syntax.
on 15 Oct 2013
@Image Analyst: I've inserted "@Ross" in your comment and have removed by concerning question.

Sign in to comment.

Answer by Jos (10584)
on 15 Oct 2013
Edited by Jos (10584)
on 15 Oct 2013

This used to be my workaround for the way strcat handles spaces:
strrep(strcat('AAA', '#SPACE#', 'BBB'),'#SPACE#',' ')


on 15 Oct 2013
What about: ['AAA', ' ', 'BBB'] ?

I should have stressed the word used ...

Sign in to comment.