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

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

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.