/*----------------------------------------------------------*/ /* */ /* AUTHOR : Eric VIOLARD */ /* E-MAIL : violard@icps.u-strasbg.fr */ /* ORGANISM : Université Louis Pasteur (Strasbourg) */ /* CREATION : 08/11/02 */ /* */ /* ---------------------------------------------------------*/ /* Programme qui compte le nombre de mots dans le flux d'entrée standard. */ #include /* pour utiliser les fonctions getchar et printf */ main() { /* déclarations */ char c; /* le caractère courant (le dernier caractère lu) */ char c_prec; /* le caractère précédent */ int nb_mots=0; /* nombre de mots déja lus (initialement 0) */ /* --- lecture des caractères (un à un) --- */ c_prec = ' '; /* on suppose qu'initialement c_prec est un caractère de ponctuation (par exemple, un espace)*/ c = getchar(); /* lecture du premier caractère */ while(c != EOF) /* tant que le flux n'est pas vide */ { /* --- décompte des mots --- */ if((c=='\n' || c==' ' || c==',' || c=='.' || c==';' || c=='?' || c=='!' || c==':') && !(c_prec=='\n' || c_prec==' ' || c_prec==',' || c_prec=='.' || c_prec==';' || c_prec=='?' || c_prec=='!' || c_prec==':')) /* si le caractère courant est un caractère de ponctuation et que le caractère précédent n'est pas un caractère de ponctuation (donc se trouvait dans un mot) */ nb_mots=nb_mots+1; /* alors compter un mot de plus */ /* --- passage au prochain caractère --- */ c_prec = c; /* mise à jour de c_prec */ c = getchar(); /* lecture du prochain caractère */ } /* --- affichage du résultat --- */ printf("Nombre de mots : %d\n",nb_mots); }