begin process at 2012 05 27 16:23:01
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > FONCTION EXPLODE (OU SPLIT)

FONCTION EXPLODE (OU SPLIT)


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caractères Classé sous :explode, split, séparation Niveau :Débutant Date de création :19/01/2005 Vu :15 592

Auteur : Hylvenir

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

L'équivalent simple de la fonction PHP explode.
Découpe une chaine selon un séparateur.

Source

  • #define MAXSTR 256
  • /* split (not split_r) */
  • char** split( char* str, char c )
  • {
  • static char* tmp[ MAXSTR ] ; /* 256 colonnes max */
  • int current = 0;
  • tmp[current++] = str;
  • while( *str ) {
  • if ( *str == c ) {
  • *str = '\0';
  • tmp[current++] = str+1; /* on devrait vérifier si on dépasse pas 256 */
  • }
  • ++str;
  • }
  • tmp[ current ] = 0;
  • return tmp;
  • }
  • /* ----- Programme principal pour le test ----- */
  • int main() {
  • int i = 0;
  • char str[][256] = { "",
  • "|",
  • "||||",
  • "chat|chien|maison|souris",
  • "|chien|maison|souris",
  • "chat|chien|maison|",
  • "chat|chien||souris",
  • "chat|chien",
  • "chat" };
  • for( i = 0; i < sizeof(str)/sizeof(str[0]); ++i ) {
  • printf( "----- %d [%s]-----\n", i, str[i] );
  • char** explode = split( str[i], '|' );
  • while( *explode )
  • printf( "[%s]\n", *explode++ );
  • }
  • }
#define MAXSTR 256

/* split (not split_r) */
char** split( char* str, char c )
{
    static char* tmp[ MAXSTR ] ;    /* 256 colonnes max */
    int current = 0;
    tmp[current++] = str;
    while( *str ) {
        if ( *str == c ) {
            *str = '\0';
            tmp[current++] = str+1;  /* on devrait vérifier si on dépasse pas 256 */
        }
        ++str;
    }
    tmp[ current ] = 0;
    return tmp;
}

/* ----- Programme principal pour le test ----- */
int main() {
    int i = 0;
    char str[][256] = { "",
                    "|",
                    "||||",
                    "chat|chien|maison|souris",
                    "|chien|maison|souris",
                    "chat|chien|maison|",
                    "chat|chien||souris",
                    "chat|chien",
                    "chat" };
   
    for( i = 0; i < sizeof(str)/sizeof(str[0]); ++i ) {
        printf( "----- %d [%s]-----\n", i, str[i] );
        char** explode = split( str[i], '|' );
        while( *explode )
            printf( "[%s]\n", *explode++ );
   }
}

 Conclusion

La fonction n'est pas réentrante (buffer static), n'est pas faite pour des lignes contenant plus de 255 colonnes ( MAXSTR - 1 pour le marqueur de fin ). Elle est pas trop bugguée puisqu'elle fait au moins les quelques tests ;-)

La chaîne passée en paramètre est modifiée (à l'instar de strtok).

Je laisse la fonction split_r  (réentrante) en exercice ;-)

PS : Je laisse niveau débutant mais j'suis pas sûr que c'est vraiment débutant.


 Sources du même auteur

Source avec Zip Source avec une capture SUDOKU HELPER
Source avec Zip Source avec une capture EPONGE DE SIERPINSKI-MENGER
Source avec Zip Source avec une capture FLOCON DE VON KOCH
Source avec Zip Source avec une capture LECTURE ASE / SDL / OPENGL
Source avec Zip Source avec une capture PINKTRIS - UN SIMPLE TETRIS EN SDL

 Sources de la même categorie

CALCUL DE CLEF RIB par Renfield
Source avec Zip [C] WD_STRING V2.2 par cyberripper
Source avec Zip LES STRING EN C, AFFECTATION, CONCATÉNATION, SPLIT, ... par appranting
Source avec Zip [C] WD_STRING V1.9 par cyberripper
Source avec Zip LIBRAIRIE LANGUAGES par astro53

 Sources en rapport avec celle ci

DLL - SPLIT AVEC MULTIPLE DELIMITEUR par Jbs106
SIMPLE FONCTION TOKENIZE par spidermario
Source avec Zip WIN32CAB .CAB par f_l_a_s_h_b_a_c_k
TABLEAUX DE CHAINES DE CARACTÈRE: FONCTIONS IMPLODE, EXPLODE... par guill76
Source avec Zip SPLIT/EXPLODE D'UNE CHAINE DE CARACTERE EN C par goth

Commentaires et avis

Commentaire de juki_webmaster le 08/05/2005 13:01:21

Merci! j'en avais vraiment besoin.
Bonne continuation.

Commentaire de theroman le 24/10/2006 15:49:52

j ai une pt question mais on ce moque po je suis extreme debutant

j ai cette erreur lorsque je compil
[Warning] passing arg 1 of `split' makes pointer from integer without a cast
[Warning] overflow in implicit constant conversion
[Warning] assignment makes integer from pointer without a cast

tout ca ou j utilise ton split c est moi qui m en sert pas bien docteur ???

mais merci pour tout scripte ca manque explode quand on vient du php

Commentaire de Hylvenir le 24/10/2006 20:13:29

Hum, tu utiles quel compilo ?
J'en ai essayé 2 sans arriver à avoir ce warning (VC++2005 et gcc)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

split/explode d'une chaine [ par goth ] bonjour tt le monde, je cherche une fonction qui ferait a peu pres la m&#234;me chose que explode en php, &nbsp;a savoir decouper une chaine suivant u segmentation par les méthodes de: Fisher; Ostu; Split/Merge [ par malik_said21 ] je cherche les algorithmes d&#233;taill&#233;s des&nbsp; m&#233;thodes&nbsp; de&nbsp;segmentation de seuillages&nbsp;(Fiser; Ostu;Split/Merge), si que Split d'une string [ par sebastienmz ] Bonjour j'ai une string qui contien la date dans ce format : Fri Nov 17 11:43:56 2006 et j'aimeraismettre chaque partie dans une char différente par e Split de chaine de caracteres [ par lektrosonic ] Existe-il une fonction predefinie qui transforme char[ ]="ceci|est|une|chaine|separee/0"  en char1[]="ceci", char2[]="est" .... ?l3KTr0 Was HeRe regrouper les deux sous ensembles qui communique le moin [ par saberigas ] Bonsoir, je voulais écrire un programme en java en utilisant "merge" et "split",mais je suis débutant en java.Le but de ce programme c'est de regroupe explode [ par thebigbang ] bonjour à tous,Je cherche une fonction C++ qui permettrait de créer des tableaux de chaine à partir d'une autre chaine que l'on aurait découpée en fon explode [ par thebigbang ] bonjour à tous,Je cherche une fonction C++ qui permettrait de créer des tableaux de chaine à partir d'une autre chaine que l'on aurait découpée en fon Split en C++ builder ? [ par belkin ] Bonjour,Je cherche l'équivalent du split (VB) sous c++ builder ?MerciFrederic Split ou pas Split... [ par crocejf2000 ] Salut,Dans mon appli MFC je split la fenetre fille dans OnCreateClient avec CSplitterWnd et j'aurai voulu controler si je la split ou pas : BOOL CChil séparation chiffres d'un nombre [ par surfeurnet ] Quelqu'un connait-il une fonction permettant de séparer les différents chiffres d'un nombre ?par exemple avec le nombre 45623 obtenir 4,5,6,2,3


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales