Recherche de chaine de caracteres...

Recherche de chaine de caracteres... - C++ - Programmation

Marsh Posté le 07-03-2003 à 15:02:07    

comment identifier des chaines de caracteres dans une chaine de carateres... je m'explique:
j'ai la chaine suivante contenue ds la variable "line"
 
ref#pcm_path#speaker#gender#reference
 
et je voudrai recuperer les valeurs qui sont entre les #
pour le moment je fait
 
mysscanf(line,"ref#%s#%s#%s#%s" ),Pcm_path,Speaker,Gender,Reference);
 
mais avec cette commande je ne recuepere que Pcm_path avec la valeur pcm_path#speaker#gender#reference.
 
comment separer le reste???
merci :fou: :fou:

Reply

Marsh Posté le 07-03-2003 à 15:02:07   

Reply

Marsh Posté le 07-03-2003 à 15:11:49    

essaye "%s[^#]#"
fais une recherche sur sscanf pour plus d'exemples

Reply

Marsh Posté le 07-03-2003 à 15:33:13    

en fait le sscanf fonctionne nickel si on met des espaces.
mais sans espace y a pas moyen...
 
au fait j'avais oublier line est unsigned short [200];
comme les autre valeurs a chercher..

Reply

Marsh Posté le 11-03-2003 à 12:16:46    

et pq ne pas lire les caracteres de line un par un jusqu'a trouver '#' et les mettre en meme temps ds un tableau de char?

Reply

Marsh Posté le 14-03-2003 à 16:03:07    

c une solution mais les boucles je trouve ca pas top.. mais chacun son avis (rq si j'avais pas trouvé j'aurais fait ca)
 
bon pour ceux que ca interresse j'ai trouvé une autre solution.
j'utilise :
 
ptr=line;
ptr1=mystrstr(ptr, LHS_T("#" ));   /*recherche du caractere*/
*ptr1='\0';                       /*on met \0 a la place */
mystrcpy(Res,ptr);        /*on copie le resultat ds la variable*/
ptr1++;                   /* on sepl ace au caractere suivant*/
ptr=ptr1;                  /* pour continuer line*/
 
voila voila
 
merci bien

Reply

Marsh Posté le 14-03-2003 à 16:07:26    

je viens de trouver un truc qui pourra peut etre t'interesser.
strtok
va voir dans l'MSDN c'est bien explique.
dsl de pas avoir pu te repondre plus tot.

Reply

Marsh Posté le 14-03-2003 à 16:09:29    

et pour savoir combien il y en a, tu peux utiliser cette fonction qui m'a ete donnee par un forumeur.
 

Code :
  1. int CDlgSALD::StrCnt(char *str_src, char * str_pattern)
  2. {
  3.     char  *pos1, *pos2;
  4.     int   d_nb_patterns;
  5.      d_nb_patterns = 0;
  6.      pos1 = str_src;
  7.      while ((pos2 = strstr(pos1, str_pattern)) != NULL)
  8.      {
  9.   d_nb_patterns++;
  10.          pos1 = pos2 + strlen(str_pattern) + 1;
  11.      } 
  12.      return (d_nb_patterns);
  13. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed