Afficher les mots d'un fichier texte

Résolu
cyrina84 Messages postés 43 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 mai 2010 - 1 juin 2008 à 15:22
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 1 juin 2008 à 20:01
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

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

devrais etre while (len > i  &&  mot[i] !=' ')
3
cyrina84 Messages postés 43 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 22 mai 2010
1 juin 2008 à 19:39
merci, ca marche.
super
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 juin 2008 à 20:01
"
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++ (@++)<!--
0
Rejoignez-nous