Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

  1. Home
  2. Programmation
  3. Développement de logiciels
  4. C
  5. [Fonction utilitaire] explode (ouioui, comme en php ;))

[Fonction utilitaire] explode (ouioui, comme en php ;))

Scheduled Pinned Locked Moved C
4 Posts 3 Posters 2.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • AlexMogA
    AlexMogA
    AlexMog
    Modérateur spécialisé
    wrote on last edited by
    #1

    <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>

    Multiplayer GameDev @ Unexpected
    

    Mon CV

    1 Reply Last reply
    1
    • AlemortA
      AlemortA
      Alemort
      wrote on last edited by
      #2

      <p>Salut, pourrais tu expliquer un peu plus ton code?</p>

      1 Reply Last reply
      0
      • AlexMogA
        AlexMogA
        AlexMog
        Modérateur spécialisé
        wrote on last edited by
        #3

        <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>

        Multiplayer GameDev @ Unexpected
        

        Mon CV

        1 Reply Last reply
        0
        • AzadA
          AzadA
          Azad
          wrote on last edited by
          #4

          <p>Merci de ce tutoriel, bien joué mon Alex. 😉 </p>
          <p>+1 Rep.</p>

          Administrateur du forum.
          Contactez-moi par message privé ou par mail.

          1 Reply Last reply
          0

          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
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          • Login

          • Login or register to search.
          Powered by NodeBB Contributors
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • World
          • Users
          • Groups