[Fonction utilitaire] explode (ouioui, comme en php ;))
-
<p>Bonjour à tous,</p>
<p>Je vais vous fournir une fonction "explode" qui vous permettra de découper une chaine de caractères grâce à un délimiteur.</p>
<p> </p>
<p><strong>I - Manuel de "explode":</strong></p>
<p><strong>NOM:</strong></p>
<p>explode - découpage de chaine de caractères.</p>
<p> </p>
<p><strong>SYNOPSYS:</strong></p>
<p>char **explode(char *chaine, char delimiteur);</p>
<p> </p>
<p><strong>DESCRIPTION:</strong></p>
<p>La fonction <strong>explode</strong> vous permettera de découper la chaine "<em>chaine</em>" grâce au délimiteur "<em>delimiteur</em>". 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").</p>
<p>Attention: la chaine "<em>chaine</em>" sera modifiée après l'utilisation de <strong>explode</strong>. Si vous souhaitez la garder, pensez à la stocker! (ex: strdump).</p>
<p> </p>
<p><strong>VALEUR RENVOYÉE:</strong></p>
<p>La fonction <strong>explode</strong> renverra un tableau de chaines de caractères contenant, dans chacune des cases, une des itérations trouvées.</p>
<p>Si aucune itérations n'a été trouvée, <strong>explode </strong>renverra une version dumpée de la chaine <em>chaine</em>.</p>
<p>Si une erreur survient, <strong>explode</strong> renverra <strong>NULL.</strong></p>
<p> </p>
<p><strong>VOIR AUSSI:</strong></p>
<p><a href="http://manpagesfr.free.fr/man/man3/strtok.3.html" rel="external nofollow">strtok(3)</a></p>
<p> </p>
<p><strong>COPYRIGHT:</strong></p>
<p>La fonction <strong>explode</strong> a été crée par AlexMog ainsi que cette page de manuel.</p>
<p> </p>
<p><strong>II - Le code:</strong></p>
<pre class="ipsCode prettyprint">
/
** 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);}
</pre>
<p>J'espère que vous ferrez bon usage de ce code
.</p>
<p> </p>
<p>N'hésitez pas à me faire vos retours en cas de bugs.</p>
<p> </p>
<p>Enjoy programming
</p>
<p> </p>
<p>Cordialement,</p>
<p>AlexMog.</p> -
<p>Voici:</p>
<pre class="ipsCode prettyprint">
/*
** 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);}
</pre>
<p>J'espère avoir assez bien expliqué ^^</p>
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login