[C] Funcion Split

Iniciado por mr.blood, Mayo 14, 2013, 02:39:36 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Mayo 14, 2013, 02:39:36 AM Ultima modificación: Octubre 28, 2013, 09:18:44 AM por Expermicid
Yo no he visto fallos, si los encontrais, comentadlos por favor. No tiene control de errores, lo hice para dar una idea ;).

Código: c
#include <stdio.h>
#include <malloc.h>
#include <string.h>

int len_palabra(char *cadena, int inicio, char separador);
char **split(char *cadena, char separador);

int main()
{
char cadena[]="MrBlood.split.crea.funcion";
int i;
char **retorno=split(cadena, '.');
for(i=0;retorno[i]!=NULL;i++)
{
printf("%s\n", retorno[i]);
free(retorno[i]);
}
free(retorno);
return 0;
}

int len_palabra(char *cadena, int inicio, char separador)
{
int len=0, i=inicio;
while(cadena[i]!=separador&&cadena[i]!='\0')
{
len++;
i++;
}
return len;
}

char **split(char *cadena, char separador)
{
int num_palabras=1, len_cadena=strlen(cadena), i, j=1, *inicios;
for(i=0;i<len_cadena;i++)
{
if(cadena[i]==separador)
{
num_palabras++;
}
}
inicios=malloc(sizeof(int)*num_palabras);
inicios[0]=0;
for(i=1;i<len_cadena;i++)
{
if(cadena[i]==separador)
{
inicios[j]=i+1;
j++;
}
}
char **retorno=malloc(sizeof(char *)*num_palabras+1);
retorno[num_palabras]=NULL;
for(i=0;i<num_palabras;i++)
{
j=len_palabra(cadena, inicios[i], separador);
retorno[i]=(char *)malloc(sizeof(char)*j);
strncpy(retorno[i], &cadena[inicios[i]], j);
retorno[i][j]='\0';
}
free(inicios);
return retorno;
}


Sa1uDoS

Gracias por el aporte!  :)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta