Afficher les mots d'un fichier texte [Résolu]

Signaler
Messages postés
43
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 mai 2010
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bonjours à tous les developpeurs icic présent, J'ai un probleme que je souffre depuis 3jours et j'espere que vous m'aidiez.
Donc voila
J'ai fichier texte qui contient des phrase.le programme doit afficher les mots de chaque ligne.
Moi j'ai essayé mais ca na pas donnée un bon resultat:
voila mon code : Bon là j'ai pas testé sur un fichier mais j'ai testé sur une simple phrase "Hello World".



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void extraireMot(char *mot, size_t *ret);

int main (void)
{
size_t i = 0;
int j;
char mot[] = " hello world ";

for (j = 1; j <= 4; j++)
{
printf ("Mot %d : ", j);
extraireMot (mot, &i);
puts ("");
}

getchar ();
return 0;
}

void extraireMot (char *mot, size_t *ret)
{
size_t i = *ret;
size_t len = strlen (mot);

while (len > i && mot[i]==' ')
{
i++;
}

while (len > i && mot[i]!=' ')
{
putchar (mot[i]);
i++;
}

*ret = i;
}




merci d'avance , je compte sur vous

3 réponses

Messages postés
336
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
while (len > i  &&  mot[i]==' ')

devrais etre while (len > i  &&  mot[i] !=' ')
Messages postés
43
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 mai 2010

merci, ca marche.
super
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
"
while (len > i  &&  mot[i]==' ')

devrais etre while (len > i  &&  mot[i] !=' ')"

La première boucle ? D'après ce que je peux en déduire, elle sert à sauter les espaces avant le mot. Dans ce cas, c'est bien mot[i] == ' '.

Aussi, strlen (mot) pour chaque appel de la fonction, ça fait un peu lourd. À la place, test le caractère pour savoir si il n'égal pas un 0 de fin de chaine:

while(mot[i] && ...)

Finalement, il n'y a pas que les espaces qui indique la fin d'un mot. Un point, une virgule, un guillemet, une accolade, un tiret etc. etc. etc.
Serait bien plus simple de tester si le caractère est une lettre ou un chiffre plutôt que tester si ce n'est pas un espace.

C++ (@++)<!--