why is a blank ignored in strcat

as an example, the following code:
strcat(num2str(1,'%02.0f'), '-', num2str(2), ' ', num2str(3), ':', num2str(4,'% 2.0f'))
produces:
01-23:4
whereas I want:
01-2 3: 4
Seems pretty simple but ... would someone help please?

 Respuesta aceptada

Jan
Jan el 15 de Oct. de 2013
Editada: Jan el 15 de Oct. de 2013
'% 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.

Más respuestas (2)

Friedrich
Friedrich el 15 de Oct. de 2013
Hi,
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')]

4 comentarios

Ross
Ross el 15 de Oct. de 2013
Thanks for that Friedrich, nearly there -- can get by -- but the expected (for me) blank in front of the 4 is still missing with both methods you've proposed.
Image Analyst
Image Analyst el 15 de Oct. de 2013
Editada: Jan el 15 de Oct. de 2013
@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.
Image Analyst
Image Analyst el 15 de Oct. de 2013
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.
Jan
Jan el 15 de Oct. de 2013
@Image Analyst: I've inserted "@Ross" in your comment and have removed by concerning question.

Iniciar sesión para comentar.

Jos (10584)
Jos (10584) el 15 de Oct. de 2013
Editada: Jos (10584) el 15 de Oct. de 2013
This used to be my workaround for the way strcat handles spaces:
strrep(strcat('AAA', '#SPACE#', 'BBB'),'#SPACE#',' ')

2 comentarios

Jan
Jan el 15 de Oct. de 2013
What about: ['AAA', ' ', 'BBB'] ?
Jos (10584)
Jos (10584) el 15 de Oct. de 2013

I should have stressed the word used ...

Iniciar sesión para comentar.

Productos

Etiquetas

Preguntada:

el 15 de Oct. de 2013

Comentada:

el 15 de Oct. de 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by