Función SPLIT con delimitador multicarácter

  • 2 Respuestas
  • 3318 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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct {
  4.         char **substring_ptr;
  5.         int number_of_substrings;
  6. } split_struct;
  7. int _strlen(char*);
  8. split_struct *split(char *,char *,int,int);
  9. int main() {
  10.     split_struct *str_info;
  11.     char str[] = "STR1#DLM#STR2#DLM#STR3#DLM#STR4";
  12.     char sep[] = "#DLM#";
  13.     str_info = split(str,sep,_strlen(str),_strlen(sep));
  14.     for(int y=0;y<str_info->number_of_substrings;y++)
  15.     {printf("%s\n", str_info->substring_ptr[y]);}
  16.     getchar();
  17.     return 0;
  18. }    
  19. int _strlen(char *pstr) {
  20.     int i=0;
  21.     while(*(pstr++)!='\0') i++;
  22.     return i;
  23. }
  24. split_struct *split(char *string,char *sep, int str_len, int sep_len) {
  25.      split_struct *retvalue;
  26.      retvalue = (split_struct*)malloc(sizeof(split_struct));
  27.      int ptr_block=0, chr=0, bool_end=0;
  28.      char **buffer = (char**)malloc(sizeof(char*));
  29.      *buffer = (char*)malloc(sizeof(char*));**buffer=0;
  30.      char *tok = (char*)malloc(sep_len*sizeof(char));
  31.      for(int z=0;z<str_len;z++) {
  32.              for(int n=0;n<sep_len&&!bool_end;n++)
  33.              tok[n]=(z+n<str_len)?string[z+n]:bool_end=1;
  34.              int cmp_xy=0;for(int y=0;y<sep_len;y++)if(tok[y]!=sep[y]) cmp_xy=1;
  35.              if (cmp_xy || bool_end) {
  36.                 buffer[ptr_block][chr++] = string[z];
  37.                 buffer[ptr_block] = (char*)realloc(buffer[ptr_block],chr*sizeof(char*));
  38.                 buffer[ptr_block][chr] = 0;
  39.                 } else {
  40.                        buffer = (char**)realloc(buffer,(++ptr_block+1)*sizeof(char*));
  41.                        buffer[ptr_block] = (char*)malloc(sizeof(char*));**(buffer+ptr_block)=0;
  42.                        chr=0;z+=sep_len-1;
  43.                        }                          
  44.     }
  45.     free(tok);
  46.     retvalue->substring_ptr = buffer;
  47.     retvalue->number_of_substrings = ptr_block+1;
  48.     return retvalue;
  49. }
  50.  

Desconectado 79137913

  • *
  • Co Admin
  • Mensajes: 700
  • Actividad:
    10%
  • Reputación 16
  • 4 Esquinas
  • Skype: [email protected]
    • 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*                                                   DOORS.PARTY

Desconectado [L]ord [R]NA

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

Re:Función SPLIT con delimitador multicarácter

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

 

[C] Función acción cada x segundos - Sanko

Iniciado por Sanko

Respuestas: 3
Vistas: 3257
Último mensaje Diciembre 24, 2012, 08:01:14 pm
por linkgl
Funcion instr o strpos

Iniciado por linkgl

Respuestas: 4
Vistas: 4672
Último mensaje Diciembre 24, 2012, 08:16:13 pm
por linkgl
[C] Funcion Split

Iniciado por mr.blood

Respuestas: 1
Vistas: 3024
Último mensaje Mayo 25, 2013, 02:33:47 am
por StuXn3t