Ex 11.13
#include <stdio.h>
main()
{
/* Prototype de la fonction FIN_PHRASE */
int SEPA(char C);
/* Déclarations : */
/* Noms des fichiers et pointeurs de référence */
char NOM_FICH[30];
FILE *FICHIER;
/* Autres variables */
char C; /* caractère lu dans le fichier */
int ABC[26]; /* compteurs des lettres de l'alphabet */
int NTOT; /* nombre total des caractères */
int NAUTRES; /* nombre des caractères qui ne font pas
partie de l'alphabet */
int NMOTS; /* nombre des mots */
int NPARA; /* nombre de paragraphes (retours à la ligne) */
int I; /* indice d'aide */
int DANS_MOT; /* indicateur logique: */
/* vrai si la tête de lecture se trouve */
/* actuellement à l'intérieur d'un mot. */
/* Ouverture de l'ancien fichier en lecture */
do
{
printf("Nom du fichier texte : ");
scanf("%s", NOM_FICH);
FICHIER = fopen(NOM_FICH, "r");
if (!FICHIER)
printf("\aERREUR: Impossible d'ouvrir "
"le fichier: %s.\n", NOM_FICH);
}
while (!FICHIER);
/* Initialisations des variables */
for (I=0; I<26; I++)
ABC[I]=0;
NTOT =0;
NAUTRES =0;
NMOTS =0;
NPARA =0;
DANS_MOT=0;
/* Examination des caractères du fichier */
while (!feof(FICHIER))
{
C=fgetc(FICHIER);
if (!feof(FICHIER))
{
/* Comptage au niveau caractères */
if (C=='\n')
NPARA++;
else
{
NTOT++;
if (C>='a' && C<='z')
ABC[C-'a']++;
else if (C>='A' && C<='Z')
ABC[C-'A']++;
else
NAUTRES++;
}
/* Comptage des mots */
if (SEPA(C))
{
if (DANS_MOT)
{
NMOTS++;
DANS_MOT=0;
}
}
else
DANS_MOT=1;
}
}
/* Fermeture du fichier */
fclose(FICHIER);
/* Affichage du résultat */
printf("Votre fichier contient :\n");
printf("\t%d paragraphes\n", NPARA);
printf("\t%d mots\n", NMOTS);
printf("\t%d caractères\ndont\n", NTOT);
for (I=0; I<26; I++)
printf("\t%d fois la lettre %c\n", ABC[I], 'a'+I);
printf("et %d autres caractères\n", NAUTRES);
return 0;
}
int SEPA(char C)
{
/* Tableau contenant tous les séparateurs de mots */
char SEP[12] = { '\n', ' ', ',', ';', '.', ':',
'?', '!', '(', ')', '"', '\'' };
int I;
/* Comparaison de C avec tous les éléments du tableau */
for (I=0 ; C!=SEP[I] && I<12 ; I++) ;
if (I==12)
return 0;
else
return 1;
/* ou bien simplement : */
/* return (I != 12); */
}
Feedback - Copyright © 1993,1996,1997 F.Faber