Advertisement
Guest User

strutil

a guest
Nov 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.53 KB | None | 0 0
  1. #include "strutil.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. char** array_redimensionar(char** array,size_t* capacidad){
  7.     char** array_aux = realloc(array,sizeof(char*) * (2 *(*capacidad)));
  8.     *capacidad*=2;
  9.     return array_aux;
  10. }
  11.  
  12. char** split(const char* cadena, char sep){
  13.     size_t capacidad = 10;
  14.     size_t largo,i=0,condicion;
  15.     char** array = malloc(sizeof(char*)*capacidad);
  16.     char* sobrante;
  17.    
  18.     sobrante=strchr(cadena,sep);
  19.     if(!sobrante)
  20.         sobrante="";
  21.     condicion = strlen(sobrante);
  22.  
  23.     while(condicion){
  24.  
  25.         if (i==capacidad-1)
  26.             array=array_redimensionar(array,&capacidad);
  27.  
  28.         largo= strlen(cadena) - strlen(sobrante);
  29.         array[i] = (char*)calloc(largo+1,sizeof(char));
  30.         memcpy(array[i],cadena,largo);
  31.         cadena=sobrante+1;
  32.         sobrante=strchr(cadena,sep);
  33.         if(!sobrante)
  34.             sobrante="";
  35.         condicion = strlen(sobrante);
  36.  
  37.         i++;   
  38.     }
  39.     largo = strlen(cadena) + 1; // +1 por /0
  40.     array[i] = malloc(largo * sizeof(char));
  41.  
  42.     memcpy(array[i],cadena,largo);
  43.  
  44.     array[i+1] = NULL;
  45.  
  46.     return array;
  47. }
  48.  
  49.  
  50.  
  51. char* join(char** array,char sep){
  52.     size_t letras=0;
  53.     char** p=array;
  54.     while(*p){
  55.         letras=letras+strlen(*p)+1;
  56.         p++;
  57.     }
  58.     letras++;
  59.     int k=0;
  60.     char* cadena = calloc(letras,sizeof(char));
  61.     for(int i=0;array[i];i++){
  62.         for(int j=0;array[i][j];j++){
  63.                 cadena[k] = array[i][j];
  64.                 k++;
  65.         }
  66.         if(array[i+1])     
  67.             cadena[k] = sep;
  68.         k++;
  69.     }
  70.     return cadena;
  71.  
  72.  
  73. }
  74.  
  75. void free_strv(char* array[]){
  76.     for(int i = 0; array[i];i++)
  77.         if(array[i])
  78.             free(array[i]);
  79.     free(array);
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement