Gettok() - obtenir le nième token

Contenu du snippet

Cette fonction permet d'obtenir le Nième token contenu dans une chaîne de caractère, celui-ci est copié vers un buffer. La fonction retourne l'offset du token copié si celui-ci existe, sinon elle retourne -1.
À noter que les tokens vides ne sont pas pris en compte.

Source / Exemple :


#include <stdio.h>

int gettok(char *subject, int num, int sep, char *dszt) {
	char *c, *d; /*deux pointeurs sur subject*/
	int i = 0, of = 0 , r = 0; bool cont;
	if (num < 0) { cont = true; num *= -1; } /*si num est négatif*/
	else  cont = false;
	c = d = subject;
	/*si il y en a, on pase les séparateurs du début, afin de
	ne pas retourner un token vide */
	while (*c == sep) { *c++; of++; } d = c;
	//tant que le chaine n'est pas parcourue entièrement par c..
	while (*c) {
		//si on rencontre le caractère de séparation...
		if (*c == sep) {
				i++;
				if (i == num) {
					if (!cont) while (d < c) *dszt++ = *d++;
					else while (*d) *dszt++ = *d++;

  • dszt = 0;
//retourne l'offset du token return of; } //comme d = c, on incrémente of de r qu'on remet à 0 while (*c == sep) { *c++; of++; } of += r; r = 0; d = c; } else { c++; r++; } } //c arrivé à la fin de la chaîne, on vérifie si il reste un token... if (d < c) { i++; if (i == num) { while (*d) *dszt++ = *d++;
  • dszt = 0;
return of; } } //le token recherché n'existe pas, on retourne -1 return -1; } int main(int argc, char* argv[]) { char buff[32]; int o = gettok("22:46",2,':',buff); printf("minutes: %s offset: %d\n",buff,o); gettok("Couleur: bleu Prix: 1999 Année: 1996 Desc: Très belle voiture, ayant fait..", -8,32,buff); printf("%s\n",buff); return 0; }

Conclusion :


Si vous voulez copier les caractères qui suivent le token voulu, il faut préfixer le préfixer par un "-".
Ex: gettok("Au revoir et bonne chance !",-4,32,out); copiera dans out la chaîne de caractères "bonne chance !".

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.