Gettok() - obtenir le nième token

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 831 fois - Téléchargée 30 fois

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

Ajouter un commentaire Commentaires
Messages postés
244
Date d'inscription
mercredi 11 juin 2003
Statut
Membre
Dernière intervention
25 juin 2005

C'est cool que tu aies fait ce petit code comme ça on peut voir comment marche notre petit $gettok() qu'on utilise tout le temps dans mIRC.

Bonne idée ;)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
pense a specifier ce qui pour toi est un token

type xml?

utilise plutot char que int pour le séparateur...

sinon, une chtite faute d'ortho : pase => passe


autrement, pt de vu prog,
*dszt = 0;
prefere : *dszt = NULL;

sinon, po mal l'idée de l'ordre invers

++
Magicalement
Nono.

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.