Pergunta

Eu estou tentando fazer isso:

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

Eu esperava ver "branco vermelho amarelo", no entanto, eu vejo "redyellowwhite" na saída do comando. O que precisa ser feito para garantir os espaços são concatenados corretamente? Agradecemos antecipadamente.

Foi útil?

Solução

A partir da página de ajuda matlab para strcat:

"ignora strcat arrasto ASCII caracteres de espaço em branco e omite todos esses caracteres a partir da saída. Espaços em branco em ASCII são espaço, nova linha de retorno de carro, de guia, guia vertical, ou de avanço de caracteres, os quais retornam um verdadeiro resposta da função MATLAB isspace. Use a sintaxe concatenação [s1 s2 s3 ...] para preservar espaços à direita. strcat não ignora entradas que são conjuntos de células de cordas ".

Outras dicas

strcat ignora à direita espaço em branco, ainda preserva líder espaço em branco. Tente isto:

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

Como alternativa, você pode simplesmente usar a sintaxe concatenação:

['red ' 'yellow ' 'white ']

Na verdade, você pode simplesmente usar o código ASCII do espaço: 32. Assim, você pode resolver o problema assim:

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

Em seguida, você receberá str = 'red yellow white'.

Você pode proteger espaços em branco em strcat () ou funções similares, colocando-o em uma célula.

str = strcat({'red '}, {'yellow '}, {'white '})
str = str{1}

Não é muito útil neste exemplo básico. Mas se você acabar fazendo operações "vectorized" sobre as cordas, é útil. concatenação de matriz regular não faz a concatenação 1-para-muitos que strcat faz.

strs = strcat( {'my '}, {'red ','yellow ','white '}, 'shirt' )

Furar 'meu' em uma célula, mesmo que seja uma única corda vai preservar o espaço em branco. Note que você tem que usar o {} formulário em vez de chamar cellstr (), que se irá retirar espaços em branco.

Tudo isto é provavelmente porque o Matlab tem duas formas de representar listas de cordas: como uma matriz cellstr, onde todos os espaços em branco é significativo, e como uma matriz em branco acolchoado 2-dimensional carvão animal, com cada linha tratada como uma cadeia de caracteres, e espaços em branco ignorado. A forma cellstr mais se assemelha cordas em Java e C; a forma de char 2-D pode ser mais eficiente de memória, se você tem muitas cadeias de comprimento similar. funções de manipulação de seqüência de Matlab são polimórficos nas duas representações, e às vezes apresentam diferenças como este. Um carvão animal literal como 'foo' é um caso de uma corda degenerada da forma de char 2-D, e as funções de Matlab tratá-lo como tal.

ou você pode dizer:

str = sprintf('%s%s%s', 'red ', 'yellow ', 'white ')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top