Fonction split() pour découper une chaine de caractères

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 745 fois - Téléchargée 30 fois

Contenu du snippet

Cette fonction vous permet de découper une chaine à chaque itération d'un caractère.

La chaine à découper peut etre sous la forme char* ou TCHAR* ou autre, c'est à vous de définir le type, il est donc possible de l'utiliser pour tout type de tableau à cellule de fin nulle.

Par exemple, elle permettra de séparer les mots d'une phrase (les separateurs seront les espaces). j'ai mis sous la fonction une section de code pour tester Split().

Source / Exemple :


template <class T>
T ** Split (const T * tab, T cel)
{
  T ** res;
  unsigned long i, j, pos, k;
  for (i=0,pos=1;tab[i]!=(T)0;i++)
    if (tab[i]==cel)
      pos++;
  res = new T * [pos+1];
  res [pos] = NULL;
  for (k=0,i=0;k<pos;k++)
  {
    for (j=i;tab[j]!=cel&&tab[j]!=(T)0;j++);
    res [k] = new T [j-i+2];
    res [k] [j-i+1] = (T)0;
    memcpy (res [k], tab+i, (j-i+1) * sizeof(T));
    i=j+1;
  }
  return res;
}

// Pour tester la fonction :
//  char ** ss;
//  ss = Split<char> ("Bonjour tout  le monde :D", ' ');
//  for (int i=0;ss[i];i++)
//    std::cout << (ss[i]?ss[i]:"NULL") << std::endl;

Conclusion :


Etant donné que j'utilise un template, il faut mettre cette fonction dans votre fichier d'entête (.h)

A voir également

Ajouter un commentaire

Commentaire

Messages postés
71
Date d'inscription
mercredi 17 juillet 2002
Statut
Membre
Dernière intervention
20 avril 2008

Salut,

Je viens de voir ton template et après modification pour mes besoins (en C), je la trouve très bien.
Simple et cela semble efficace (faut que je vérifie mes mémoires :)) histoire de voir s'il n'y a pas de fuite :))

Ceci dit dans ton exemple d'utilisation, tu aurais du mettre une instruction de libération de mémoire
delete[] ss;

cela parait inutile de le dire là tout de suite mais on l'oublie que trop facilement, héhé :)

good job boy!

MickBad

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.