Ir para conteúdo
Fórum Script Brasil
  • 0

Alternativa Ao Explode(strtok)


Heldinho

Pergunta

Gente, eu preciso mesmo criar um modo de separar uma string sem usar a strtok.. olhem o código que eu comecei a fazer:

#include <stdio.h>
int explode(char *origem, char *destino){
int counter=0;
int counter2=0;
int x=0;
while(x<strlen(origem)){
if(origem[x] != '-' && origem[x+1] != '_' && origem[x+1+1] != '-'){
destino[counter2][counter] = origem[x];
counter++;
x++;
}
else{
x=x+2;
counter2++;
counter=0;
}
}
}

void main(void){
char *variavel[255];
char teste[500];
sprintf(teste,"Olá!-_-Teste-_-");
explode(teste,variavel);
printf("%s",variavel[0]); /* Aki era pra aparecer Olá! na tela, variavel[1] deveria ser Teste e variavel[3] Deveria ser (NULL)... nem imagino aonde está o bug.. */
}

bom.. simplesmente aparece um 0 na tela quando eu dou o printf no variavel[0]... deve ter muitos bugs aí.. será que alguém pode me ajudar? vou continuar tentando... obrigado e até +!! laugh.gif

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bom... Tem dois erros... O primeiro está na passagem de parâmetros, não sei porque, mas deve especificar a qunatidade de colunas do array multidimensional. O segundo, é que você esqueceu de colocar um '\0' no final de cada string para ser impressa corretamente. Ex.:

strs[0] = "Ola!\0"

strs[1] = "Teste\0"

Com as modifacações, seu código fonte fica:

#include <stdio.h>

void explode(char origem[], char destino[][2])
{
   int counter=0;
   int counter2=0;
   int x=0;
   while(x<strlen(origem)){
      if(origem[x] != '-' && origem[x+1] != '_' && origem[x+1+1] != '-'){
         destino[counter2][counter] = origem[x];
         counter++;
         x++;
      }
      else{
         x=x+2;
         destino[counter2][x] = '\0';
         counter2++;
         counter=0;
      }
   }
}

int main(void)
{
   char variavel[2][25];
   char teste[] = "Ola!-_-Teste-_-";
   int i;
   for (i = 0; i < 15; i++)
      variavel[0][i] = teste[i];
   explode(teste,variavel);
   printf("%s",variavel[0]); /* Aki era pra aparecer Olá! na tela, variavel[1] deveria ser Teste e variavel[3] Deveria ser (NULL)... nem imagino aonde está o bug.. */
   
   return 0;
}

falou!

Link para o comentário
Compartilhar em outros sites

  • 0
Cara, Você Salvou o Dia! =D.. muito obrigado mesmo!!Quero agradecer o Aragorn13 (deveria ser 14){Rodfrag} também, pois ficou um tempão tentando resolver isso também.. de qualquer forma, obrigado a todos!!!

Que nada, eu nem saquei que faltava o caracter nulo, méritos para o Douplus

E lamentos para o bcc que continua disparando warning pela boca sem parar.

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui!!! Bom, primeiro tem que mudar a condição do if no explode, daí é só incrementar 3 em x ao invéz de 2 quando a condição for verdadeira. Veja como ficou o código fonte:

#include <stdio.h>

void explode(char origem[], char destino[][6])
{
   int counter=0;
   int counter2=0;
   int x=0;
   while(x<strlen(origem)){
      if(origem[x] == '-' && origem[x+1] == '_' && origem[x+1+1] == '-') {
         destino[counter2][counter] = '\0';
         x=x+3;
         counter2++;
         counter=0;
      }
      else {
         destino[counter2][counter] = origem[x];
         counter++;
         x++;
      }
   }
}

int main(void)
{
   char variavel[3][6];
   char *teste = "Ola!-_-Teste-_-";
   explode(teste,variavel);
   printf("%s\n",variavel[0]);
   printf("%s\n",variavel[1]);
  
   return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0
Bom... Tem dois erros... O primeiro está na passagem de parâmetros, não sei porque, mas deve especificar a qunatidade de colunas do array multidimensional. O segundo, é que você esqueceu de colocar um '\0' no final de cada string para ser impressa corretamente. Ex.:

strs[0] = "Ola!\0"

strs[1] = "Teste\0"

Com as modifacações, seu código fonte fica:

#include <stdio.h>

void explode(char origem[], char destino[][2])
{
   int counter=0;
   int counter2=0;
   int x=0;
   while(x<strlen(origem)){
      if(origem[x] != '-' && origem[x+1] != '_' && origem[x+1+1] != '-'){
         destino[counter2][counter] = origem[x];
         counter++;
         x++;
      }JJ
      else{   ABRAHAO1010@IG.COM.BR
         x=x+2;
         destino[counter2][x] = '\0';
         counter2++;
         counter=0;
      }
   }
}

int main(void)
{
   char variavel[2][25];
   char teste[] = "Ola!-_-Teste-_-";
   int i;
   for (i = 0; i < 15; i++)
      variavel[0][i] = teste[i];
   explode(teste,variavel);
   printf("%s",variavel[0]); /* Aki era pra aparecer Olá! na tela, variavel[1] deveria ser Teste e variavel[3] Deveria ser (NULL)... nem imagino aonde está o bug.. */
   
   return 0;
}

falou!

abrahao1010@ig.com.br

+++++++++==================

~k#3%%%%%%%%%5

11 bin ttttt

usa 11 2006 bin a d uas. ~

T T T T T 11 YOI ZZZJK O1 01 9:45 2006 T T

()

K6¨¨¨¨

[b]@U 
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...