Fonction explode (ou split)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 674 fois - Téléchargée 31 fois

Contenu du snippet

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

Source / Exemple :


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

A voir également

Ajouter un commentaire

Commentaires

Hylvenir
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2 -
Hum, tu utiles quel compilo ?
J'en ai essayé 2 sans arriver à avoir ce warning (VC++2005 et gcc)
theroman
Messages postés
10
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
27 juin 2006
-
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
juki_webmaster
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3 -
Merci! j'en avais vraiment besoin.
Bonne continuation.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.