Soyez le premier à donner votre avis sur cette source.
Snippet vu 11 202 fois - Téléchargée 32 fois
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;
10 août 2004 à 10:31
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.