Guest User

Untitled

a guest
Jan 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.  
  6. //fonction qui prend en argument une chaine de caractère s[]
  7. //et le caractère spécifique du séparateur
  8. //Elle retourne ensuite un tableau de sous-chaines.
  9. void strsplit(char s[], char sep) {
  10.     //nombre de séparateurs
  11.     int nbsep = 0, indfinmot;
  12.  
  13.     //compte et stocke le nombre de séparateurs dans nbsep
  14.     for (int i = 0; s[i] != '\0'; i++)
  15.         if (s[i] == sep)
  16.             nbsep++;
  17.     printf("Le nombre de séparateurs est de: %d\n", nbsep);
  18.     //créé un tableau de pointeurs de taille nbsep+1
  19.     char **tab;
  20.     tab = malloc(nbsep + 1);
  21.     printf("test");
  22.  
  23.  
  24.     //i est la l'indice qui va parrcourir toute la chaine s[]
  25.     //n est l'indice de la case du n-éme mot dans tab
  26.     //j va etre permetre de stocker les lettres dans le tableau
  27.     int i = 0, n = 0;
  28.  
  29.     //boucle qui va traverser toute la chaine s[]
  30.     while (s[i] != '\0') {
  31.         printf("J'entre dans la boulce while");
  32.         //sous-boucle qui va stocker le n-éme mot dans la n-éme case
  33.         //du tableau
  34.         while (i != sep && i != '\0')
  35.             i++;
  36.         //Allocation dun espace de la taille de la n-éme chaine de
  37.         //caractères
  38.         tab[n] = malloc(i+1);
  39.  
  40.         //cette boucle va stocker la n-éme chaine de caractére dans la
  41.         //n-éme case du tableau
  42.         for (int j = 0; j < i; j++) {
  43.             tab[n][j] = s[j];
  44.             indfinmot = j + 1;
  45.         }
  46.  
  47.         //On s'assure que le dernier caractère du tableau est bien le
  48.         //caractère null
  49.         tab[n][indfinmot] = '\0';
  50.  
  51.         printf("Chaine num %d = %s\n", n, tab[n]);
  52.  
  53.         if (s[i] == sep)
  54.             s = s + i + 1;
  55.         n++;
  56.         }  
  57.  
  58.     for (int k = 0; k < nbsep; k++)
  59.         printf("%d --> %s\n", k, tab[k]);
  60. }
  61.  
  62.  
  63. int main(int argc, char * argv[], char * env[]) {
  64.  
  65.     strsplit("/bin :/usr/bin :/usr/local/bin", ':');
  66.  
  67.     return 0;
  68. }
Add Comment
Please, Sign In to add comment