Ir para o conteúdo
dramos21

[Resolvido] Cadeias de Caracteres

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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));

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.