Fonction explode (ou split)

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

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.