Jump to content
dramos21

[Resolvido] Cadeias de Caracteres

Recommended Posts

dramos21

Boa noite,

Eu tenho uma cadeia de caracteres por Exemplo Bom Dia e quero meter espaços entre cada letra numa palavra para ficar o resultado:

B o m D i a. A minha dúvida é que por exemplo, se eu quiser percorrer a cadeia "Bom dia" para dizer que se a posição onde me encontro for uma letra e a seguinte for outra letra e lhe disser para meter um espaço onde está o 'o' e passar o 'o' para a posição a seguir não vou conseguir faze-lo porque se não daria o resultado "B o dia" certo? há alguma maneira de eu percorrer o vector e adiantar uma posição todos os caracteres numa so iteração?

Obrigado

Share this post


Link to post
Share on other sites
pmg

A maneira mais pratica, a meu ver, é arranjares outro array onde vais pondo os espacos e as letras vindas do array original:

B --> copia para novo array
 --> adiciona espaco
o --> copia para novo array
 --> adiciona espaco
...

No fim deste processo, se necessario, copia os elementos do array com espacos para o array original. Toma muita atencao para teres espaco suficiente.

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
dramos21

Eu já tinha pensado nisso, mas eu tenho que fazer uma função que recebe uma cadeia de caracteres, ao chamar a função na main, esse novo vector a que adicionei os espaços também tem de ser declarado na main e se eu quiser fazer uma operação sobre ele tenho de utilizar esse mesmo vector certo? Não há nenhuma maneira de apenas alterar o vector sem criar outro?

Share this post


Link to post
Share on other sites
HappyHippyHippo

sim, desde que o vector/array original tenha tamanho para isso, no entanto dá bem mais trabalho que usando a cópia.

para simplificar o processo, tenta usar a função memcpy

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pmg

Não há nenhuma maneira de apenas alterar o vector sem criar outro?

Ha, mas nao é nada agradavel ...

comeca na posicao 0
se o elemento na posicao actual for uma letra: copia todos os elementos seguintes para a direita e insere um espaco
aumenta a posicao actual
repete ate ao fim da string

Nota que se fizeres uma funcao para acrescentar os espacos, o array de ajuda pode existir apenas dentro da funcao: nao precisa de ser declarado na main().

para simplificar o processo, tenta usar a função memcpy

Qual processo?

Suponho que te referes ao processo com um array auxiliar (memcpy() nao deve ser usado dentro do mesmo array) ... e para esse processo copiar caracter a caracter por atribuicao simples é bem facil e eficiente.

Para mover bytes dentro do mesmo array usa memmove().


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
HappyHippyHippo

Para mover bytes dentro do mesmo array usa memmove().

sim, claro ... estava com a cabeça noutro assunto e baralhei as funções


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
dramos21

Só duas coias, sobre a função strlen. Esta função retorna a dimensão do vector sem considerar o espaço ocupado pelo '/0' ?

quando eu crio uma cadeia de caracteres com tamanho 500 e por exemplo meto a frase "Bom dia", a dimensão desta cadeia passa a ser 8 ( com '/0' ) e deixo de ter acesso aos outros 492 espaços na cadeia que declarei?

Share this post


Link to post
Share on other sites
HappyHippyHippo

Só duas coias, sobre a função strlen. Esta função retorna a dimensão do vector sem considerar o espaço ocupado pelo '/0' ?

sim

quando eu crio uma cadeia de caracteres com tamanho 500 e por exemplo meto a frase "Bom dia", a dimensão desta cadeia passa a ser 8 ( com '/0' ) e deixo de ter acesso aos outros 492 espaços na cadeia que declarei?

se declarares um array com o tamanho dito, podes aceder sem problemas aos bytes desse array.

lembra-te sempre que se pretendes que os dados no array seja uma string, terás sempre de ter o '\0' final (valor numérico zero)


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pmg

O strlen() devolve a posicao do primeiro '\0' no array.

char array[500] = "Bom dia\0mais 400+ caracteres por aqui fora ...";

Para o array acima o strlen() devolve 7 (o elemento array[7] é o '\0') mas o tamanho do array continua a ser 500, como podes verificar com o operador sizeof

printf("comprimento da string: %d caracteres\n", (int)strlen(array));
printf("tamanho do array: %d bytes\n", (int)sizeof array);
printf("comprimento da \"segunda\" string: %d caracteres\n", (int)strlen(array + 8));

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.