Función SPLIT con delimitador multicarácter

  • 2 Respuestas
  • 3576 Vistas

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

Desconectado binary_death

  • *
  • Underc0der
  • Mensajes: 18
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email

Función SPLIT con delimitador multicarácter

  • en: Septiembre 01, 2013, 01:55:52 pm
Función SPLIT que permite partir una cadena en varios trozos por otra cadena que actúa de delimitador.

Este fue uno de mis primeros códigos en C que hice para afianzar conocimientos de la sintaxis del lenguaje, así que no es muy legible que digamos, pero eso sí, funciona perfectamente.

En el código ya hay un ejemplo de cómo se usa.

Código: (C) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <stdlib.h>
typedef struct {
        char **substring_ptr;
        int number_of_substrings;
} split_struct;
int _strlen(char*);
split_struct *split(char *,char *,int,int);
int main() {
    split_struct *str_info;
    char str[] = "STR1#DLM#STR2#DLM#STR3#DLM#STR4";
    char sep[] = "#DLM#";
    str_info = split(str,sep,_strlen(str),_strlen(sep));
    for(int y=0;y<str_info->number_of_substrings;y++)
    {printf("%s\n", str_info->substring_ptr[y]);}
    getchar();
    return 0;
}   
int _strlen(char *pstr) {
    int i=0;
    while(*(pstr++)!='\0') i++;
    return i;
}
split_struct *split(char *string,char *sep, int str_len, int sep_len) {
     split_struct *retvalue;
     retvalue = (split_struct*)malloc(sizeof(split_struct));
     int ptr_block=0, chr=0, bool_end=0;
     char **buffer = (char**)malloc(sizeof(char*));
     *buffer = (char*)malloc(sizeof(char*));**buffer=0;
     char *tok = (char*)malloc(sep_len*sizeof(char));
     for(int z=0;z<str_len;z++) {
             for(int n=0;n<sep_len&&!bool_end;n++)
             tok[n]=(z+n<str_len)?string[z+n]:bool_end=1;
             int cmp_xy=0;for(int y=0;y<sep_len;y++)if(tok[y]!=sep[y]) cmp_xy=1;
             if (cmp_xy || bool_end) {
                buffer[ptr_block][chr++] = string[z];
                buffer[ptr_block] = (char*)realloc(buffer[ptr_block],chr*sizeof(char*));
                buffer[ptr_block][chr] = 0;
                } else {
                       buffer = (char**)realloc(buffer,(++ptr_block+1)*sizeof(char*));
                       buffer[ptr_block] = (char*)malloc(sizeof(char*));**(buffer+ptr_block)=0;
                       chr=0;z+=sep_len-1;
                       }                           
    }
    free(tok);
    retvalue->substring_ptr = buffer;
    retvalue->number_of_substrings = ptr_block+1;
    return retvalue;
}

Desconectado 79137913

  • *
  • Co Admin
  • Mensajes: 712
  • Actividad:
    20%
  • Country: 00
  • Reputación 7913
  • 4 Esquinas
    • Ver Perfil
    • Doors.Party
    • Email

Re:Función SPLIT con delimitador multicarácter

  • en: Septiembre 01, 2013, 08:29:52 pm
HOLA!!!

Esto me hace recordar a una funcion que arme en vb6 para eso mismo!

Dejo link por si alguien lo quiere


GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                   You are not allowed to view links. Register or Login

Desconectado [L]ord [R]NA

  • *
  • Underc0der
  • Mensajes: 89
  • Actividad:
    0%
  • Reputación 0
  • H-Sec
  • Twitter: lordrna
    • Ver Perfil

Re:Función SPLIT con delimitador multicarácter

  • en: Septiembre 04, 2013, 05:45:48 pm
79 olvidaste el link