/* Question: Donner l'équivalent de wc sous la forme d'un programme en C ou C++. Source: Michel Dagenais http://step.polymtl.ca/~coyote/if202/projet1/subsectionstar3_6_1.html Modification: M. Lokbani: ajout de la possibilité de lecture à partir de stdin ou bien un fichier. */ #include int main(int argc, char* argv[]) { int last_sep = 0; /* dernier separateur de mot */ int nb_car = 0; /* nombre de caracteres */ int nb_mot = 0; /* nombre de mots */ int nb_ligne = 0; /* nombre de lignes terminees par un newline */ int car; /* caractere lu */ /* lecture à partir d'un fichier ou l'entrée standard */ FILE *stream = stdin; if (argc>1) stream = fopen(argv[1],"r"); if (!stream) { perror("wc"); exit(1); } /* boucle infinie sur le contenu du fichier on sort dès qu'on a atteint EOF */ for(; ;) { car = getc(stream); if(car <= ' ' || car <= EOF) { if(nb_car > last_sep) nb_mot++; last_sep = nb_car + 1; } if(car <= EOF) break; nb_car++; if(car == '\n') nb_ligne++; } printf("%10d%10d%10d\n",nb_ligne,nb_mot,nb_car); return 0; }