• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

SunShade

Partir strings

8 mensagens neste tópico

Boas tardes pessoal.Eu tou aqui com um problema que ja ando a bater com a cabeça nas paredes. Eu tenho uma string 123.123.123 : 20 e quero parti-la de modo a ficar com 123.123.123 e a outra parte com 20.Alguem tem sugestoes e ideias ou assim?eu consigo partir a string na parte final (do 20) com utilizaçao da strstr e nao concido partir a string de modo a conseguir utilizar a primeira parte tambem(123.123.123).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que a string está definida? como um array de carateres?

A forma mais básica é percorrers a string caracter a caracter e ires salvando cada caracter para um array, assim que encontrares um ':', começas a salvar para outro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É uma coisa assim que queres?

if (partir_string(dst1, dst2, "123.123.123 : 20", " : ")) /* erro */;
else {
  /* dst1 agora tem "123.123.123" */
  /* dst2 agora tem "20" */
}

Mete aqui o teu código.

Fazer a função baseada em strstr() parece-me boa ideia :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim esta num array de caracteres.Eu quero partir a string  quando chega a ' : ' e nao usar o ' : ' . É exactamente isso que eu quero  Pmg . Eu tentei fzr isso com strcpys mas nao deu muito bem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não testado, e gostava de ter visto o teu código!

#include <string.h>
int partir_string(char *dst1, char *dst2, const char *src, const char *sep) {
  char *p = strstr(src, sep);
  if (p == NULL) return 1; /* erro: sep não encontrado em src */
  while (src < p) *dst1++ = *src++;
  *dst1 = 0;
  while (*sep) { sep++; src++; }
  while (*src) *dst2++ = *src++;
  *dst2 = 0;
  return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ta excelente o codigo Pmg tive a testa lo agr.Vou adaptar isto a um array de strings

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também pode usar expressões regulares, através do sscanf.

char *str="123.123.123:20";
char s1[21];
char s2[21];
sscanf(str,"%20[^:]:%20s",s1,s2);

Dependendo das variações que a string pode ter, podem ser necessários ajuste.

Mas tendo em conta a simplicidade do problema, o strtok é capaz de ser o mais indicado.

0

Partilhar esta mensagem


Link 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