Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.35 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. size_t contador_separadores(char* cadena,char caracter){  
  6.     if(caracter =='\0'){
  7.         return 1;  
  8.     }  
  9.     size_t cantidad_separadores = 0;    
  10.     char aux_1[100];
  11.     char aux_2[100];
  12.     char* str = cadena;
  13.     strcpy(aux_1,str);
  14.     while(str){    
  15.         str = strchr(aux_1,caracter);    
  16.         if(str){            
  17.             str = str + sizeof(char);
  18.             strcpy(aux_2,str);          
  19.             strcpy(aux_1,aux_2);      
  20.         }      
  21.         cantidad_separadores++;  
  22.     }
  23.     return cantidad_separadores;
  24. }
  25.  
  26.  
  27. char** split(char* cadena,char caracter){
  28.     size_t cantidad_separadores = contador_separadores(cadena,caracter); // O(n)
  29.     char **strv = malloc(sizeof(char*) * (cantidad_separadores+1));
  30.     char* aux = cadena;
  31.     char cad[cantidad_separadores][100];  
  32.     size_t largo = 0;
  33.     char separador[2] = {caracter};
  34.     for(size_t i = 0; i < cantidad_separadores;i++){   
  35.         largo = strcspn(aux,separador);      
  36.         strncpy(cad[i],aux,sizeof(char)*largo);
  37.         cad[i][largo] = '\0';
  38.         strv[i] = malloc(sizeof(char) * (largo+1));
  39.         strv[i] = cad[i];
  40.         printf("%s \n",strv[i]);   
  41.         aux = strchr(aux, caracter)+ sizeof(char);
  42.     }
  43.     strv[cantidad_separadores] = NULL;
  44.     return strv;  
  45. }
  46.  
  47.  
  48.  
  49. size_t contador_unidores(char** cadena){
  50.     size_t contador=0;
  51.     while(cadena[contador]){
  52.         contador++;
  53.     }
  54.     return contador;  
  55. }
  56.  
  57. void free_strv(char** cadena){
  58.     size_t contador=0;
  59.     while(cadena[contador]){
  60.         free(cadena[contador]);    
  61.         contador++;      
  62.     }
  63.     free(cadena);
  64. }
  65.  
  66. char* join(char** cadena, char caracter){      
  67.     char unido[1000];
  68.     char* aux = "";
  69.     if(!cadena){
  70.         return aux;    
  71.     }
  72.     char parte[100];
  73.     size_t cantidad_unidores = contador_unidores(cadena);    
  74.     strcpy(unido,aux);
  75.     strcpy(parte,aux);
  76.    
  77.     for(size_t i = 0; i < cantidad_unidores; i++){
  78.         strcpy(parte,cadena[i]);
  79.         strcat(unido,parte);
  80.         if(i != cantidad_unidores - 1){
  81.             strcat(unido,&caracter);
  82.         }  
  83.     }
  84.     aux= unido;
  85.     free_strv(cadena);  
  86.     return aux;      
  87. }
  88.  
  89.  
  90. int main(){
  91.     char* s1 = "1 2 3 4 5";
  92.     char caracter = ' ';
  93.     size_t lon = contador_separadores(s1,caracter);
  94.     printf("%i cantidad de elementos del arreglo \n\n",lon+1);
  95.     char** s = split(s1,caracter);
  96.     printf("todo ok \n");
  97.     if(s)
  98.     printf("%s \n",s[0]);  
  99.    
  100.    
  101.    
  102.     char* s2 = join(s,caracter);
  103.     if(!strcmp(s1,s2))
  104.     printf("muy biennn \n");
  105.  
  106.        
  107.     return 0;  
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement