Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Alcap

Copiar uma string com numeros e caracteres para dentro de um vector de inteiros

Mensagens Recomendadas

Alcap    0
Alcap

Boas,

O problema é o seguinte:

Tenho uma string, por exemplo: "1->2->3->4->5->6->17->18->19", e quero copiar os numeros para dentro de um array de inteiros, de modo que este fique preenchido desta forma:1|2|3|4|5|6|17|18|19

Estou à horas a tentar chegar à resposta para este problema e nada, ja tentei N formas e nada resulta! O programa estava a funcionar bem, mas os numeros maiores que dez deram-me a volta ao esquema...

Desde ja agradecido,

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Usas o strtok() para dividir a string e depois convertes para inteiro:

char str[] = "1->2->3->4->5->6->17->18->19";
char * token = strtok(str, "->");

while (token != NULL) {
    int valor = atoi(token); // ASCII to int
    token = strtok(NULL, "->");
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

... O programa estava a funcionar bem, mas os numeros maiores que dez deram-me a volta ao esquema...

LOL!

Mete aqui o teu programa para obteres sugestões de como o melhorares. Sem código é impossível dizer-te onde estás a fazer mal.

Além do strtok() sugerido pelo KTachyon, talvez possas adaptar o teu método para números com mais de 1 algarismo.

Se os números podem ser negativos (-12->-8->0->1->87634) tens que ter isso em conta.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Alcap    0
Alcap

Usas o strtok() para dividir a string e depois convertes para inteiro:

char str[] = "1->2->3->4->5->6->17->18->19";
char * token = strtok(str, "->");

while (token != NULL) {
    int valor = atoi(token); // ASCII to int
    token = strtok(NULL, "->");
}

Oh god, I'm retarded! Acredites ou não estou a usar o strtok noutra parte do programa e nem me lembrei que ele recebe uma string como delimitador.

@pmg, não meti o código porque alterei-o tanto que já nem sei do original. Quanto a números negativos, não se aplica, nem números com mais de 3 algarismos.

Obrigado :-)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

... nem me lembrei que [o strtok()] recebe uma string como delimitador.

Só uma achega para os distraídos como eu sou muitas vezes :(

O strtok() recebe uma string mas trata-a como conjunto de caracteres.

strtok(NULL, "->") e strtok(NULL, ">-") têm exactamente o mesmo efeito.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Só uma achega para os distraídos como eu sou muitas vezes :(

O strtok() recebe uma string mas trata-a como conjunto de caracteres.

strtok(NULL, "->") e strtok(NULL, ">-") têm exactamente o mesmo efeito.

Por acaso devia ter pensado em meter ao contrário, mas nem me passou pela cabeça que alguém pensasse que isso corresponderia a um único delimitador. Na minha cabeça já é standard (C, Java), foi piloto automático :P

Em relação ao facto de o algoritmo inicial não funcionar para números maiores, só tens que detectar os delimitadores e se continuares a apanhar números sem delimitador, multiplicas o original por 10 e somas o novo.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade