Nombre du mot d'une chaine

mqsi Messages postés 111 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 28 avril 2010 - 5 févr. 2007 à 16:12
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 - 7 févr. 2007 à 18:18
bsr a tous,
j'ai une chaine dynamique de ce type :  str = "aaa;bbb;ccc;ddd" , je cherche a calculer le nombre du mot de la chaine;
et merci d'avance .

7 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
5 févr. 2007 à 16:38
Salut mqsi !

C'est assez simple. Si tes mots sont séparés par des point virgules, essaie ceci :
char str[] = "aaa;bbb;ccc;ddd";
char* c = str;
int NbMots = 0;
while(*c)
{
   if(*c == ';') NbMots++;
   c++;
}

Pas vérifié, mais ça devrait passer.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
mqsi Messages postés 111 Date d'inscription mardi 31 octobre 2006 Statut Membre Dernière intervention 28 avril 2010
5 févr. 2007 à 17:11
merci pr la reponse ,mais ne marche pas
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
5 févr. 2007 à 17:16
Ton str est bien un char ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
5 févr. 2007 à 17:18
Sinon à première vue je ne vois pas pourquoi ça ne marche pas.
Juste une petite chose, fais :
NbMots++;

à la fin après le while, sinon tu auras le nombre de points virgules et pas le nombre de mots.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 févr. 2007 à 00:59
";;;"
yoyo il manque une info dans ta boucle sinon tu vas nous retourner 4 alors que doit être 0.

ciao...
BruNews, MVP VC++
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
6 févr. 2007 à 09:33
Merci BruNews !

Effectivement tu vois très bien les cas particuliers.
Donc mqsi, comme l'a signalé BruNews, si le cas particulier où aucun mot n'existe entre 2 ';' est possible dans ton programme, adapte le en conséquence.
Sinon tu peux le prendre tel quel !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 7
7 févr. 2007 à 18:18
voici comment tu peux decouper ta phrase et recuperer chaque mot separe par ';'

char **list_des_mots(char *source,char sep)
{
   char **result = (char**)malloc(1);
   char *final = (char*)calloc(256,1);
   int n_elem = 0;
   int pos_in_final = 0;
   char c = 0;
   while(c = *source++)
   {
      if(c == sep)
      {
         if(pos_in_final)
         {
            result = (char**)realloc(result,sizeof(result) * (n_elem + 1));
            result[n_elem] = (char*)calloc(strlen(final) + 1, 1);
            strcpy(result[n_elem++],final);
            result[n_elem] = NULL;
         }
         pos_in_final = 0;
         continue;
      }
      final[pos_in_final++] = c;
      final[pos_in_final] = 0;
   }
   free(final);
   return result;
}

int main()
{
   char *source = "test1;test2;test3;test4";
   char **result = list_des_mots(source,';');
   int n = 0;
   while(result[n])
      printf("%s\n",result[n++]);
  
   /** liberation obligatoire des elements dans result **/
   n = 0;
   while(result[n])
      free(result[n++]);
}

je viens de taper cela au pif sans tester , ca devrait etre bon
0
Rejoignez-nous