AlexMog Posté(e) April 10, 2014 Signaler Share Posté(e) April 10, 2014 Bonjour à tous, Je vais vous fournir une fonction "explode" qui vous permettra de découper une chaine de caractères grâce à un délimiteur. I - Manuel de "explode": NOM: explode - découpage de chaine de caractères. SYNOPSYS: char **explode(char *chaine, char *delimiteur); DESCRIPTION: La fonction explode vous permettera de découper la chaine "chaine" grâce au délimiteur "delimiteur". Plusieurs délimiteurs peuvent être utilisés en les mettant l'un à côté de l'autre (ex: " \t.,") ou un mot complet (ex: "coucou"). Attention: la chaine "chaine" sera modifiée après l'utilisation de explode. Si vous souhaitez la garder, pensez à la stocker! (ex: strdump). VALEUR RENVOYÉE: La fonction explode renverra un tableau de chaines de caractères contenant, dans chacune des cases, une des itérations trouvées. Si aucune itérations n'a été trouvée, explode renverra une version dumpée de la chaine chaine. Si une erreur survient, explode renverra NULL. VOIR AUSSI: strtok(3) COPYRIGHT: La fonction explode a été crée par AlexMog ainsi que cette page de manuel. II - Le code: /* ** Code created by AlexMog ** Created the 10/04/2014 at 05:42pm. ** Last update by AlexMog the 10/04/2014 at 05:56pm. ** Please, leave the copyright. */ #include <string.h> char **explode(char *chaine, char *delimiter) { char **ret; char *word; int size; ret = NULL; word = strtok(chaine, delimiter); size = 0; while (word != NULL) { ret = realloc(ret, (size + 2) * sizeof(char*)); if (ret == NULL) return (NULL); strcpy(ret[size], word); word = strtok(NULL, delimiter); ++size; } if (ret != NULL) ret[size] = NULL; return (ret); } J'espère que vous ferrez bon usage de ce code . N'hésitez pas à me faire vos retours en cas de bugs. Enjoy programming Cordialement, AlexMog. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alemort Posté(e) April 10, 2014 Signaler Share Posté(e) April 10, 2014 Salut, pourrais tu expliquer un peu plus ton code? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
AlexMog Posté(e) April 11, 2014 Auteur Signaler Share Posté(e) April 11, 2014 Voici: /* ** Code created by AlexMog ** Created the 10/04/2014 at 05:42pm. ** Last update by AlexMog the 10/04/2014 at 05:56pm. ** Please, leave the copyright. */ #include <string.h> char **explode(char *chaine, char *delimiter) { // Variable de retours char **ret; // Variable pour écupérer un mot char *word; // Taille totale des mots lus int size; // On initialise les variables (pour éviter tout conflits et valeurs aléatoires) ret = NULL; // On stoque le premier mot trouvé avant le délimiteur (voir man strtok) word = strtok(chaine, delimiter); size = 0; // Début de la boucle, tant qu'on a un mot, on continue (je n'ai pas mis de doWhile à cause du 2nd argument de strtok qui doit être mis à NULL (lire le man de strtok) while (word != NULL) { // On alloue la place naisséssaire en mémoire pour stocker (size + 2) cases (donc, on ajoute une nouvelle case dans notre tableau à chaque tour de boucle (c'est ce qu'on appelle un tableau dynamique, je ferais un cours dessus) ret = realloc(ret, (size + 2) * sizeof(char*)); // D'après le man de realloc, celui-ci retourne NULL en cas d'erreur, je vérifie donc qu'il n'y a eu aucune erreur if (ret == NULL) return (NULL); // Je copie le contenue de "word" (donc du mot trouvé) dans la case actuelle du tableau strcpy(ret[size], word); // Je récupère le prochain mot word = strtok(NULL, delimiter); // J'incrémente la taille du tableau ++size; } // Je vérifie si ret est NULL if (ret != NULL) // Si il ne l'est pas, c'est que le tableau a été remplis , j'ajoute donc un NULL à la dernière case du tableau, pour définir la fin de celui-ci // (Ce qui explique le size + 2 au niveau du realloc ret[size] = NULL; // Enfin, on renvois le tableau alloué (ne pas oublier de le free après utilisation ) return (ret); } J'espère avoir assez bien expliqué ^^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Azad Posté(e) April 17, 2014 Signaler Share Posté(e) April 17, 2014 Merci de ce tutoriel, bien joué mon Alex. +1 Rep. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.