Elektronique - Cours d'électronique

Programme compteur de mots (langage C)

icône imprimante Imprimer cette page

Introduction sur le programme

Difficulté: etoile pleine

Ce tutorial va expliquer comment réaliser un programme qui comptabilise le nombre de mots dans une phrase. Cela peut être utile, par exemple en PHP (qui ressemble à la programmation en langage c) pour compter les mots d'un texte sur une page web.

Pour suivre ce tuto il convient d'avoir des notions sur le langage c, en ayant réaliser d'autres programmes vus précédemment (comme par exemple le programme de note moyenne, ou le programme de rendu de monnaie).

Je vous souhaite à tous bonne chance, si vous suivez bien cela ne doit pas poser trop de difficultés.

Plan du tutorial

retour en haut

Cahier des charges

Avant même de commencer, il faut se poser un peu et réfléchir sur la méthode à utiliser pour compter les mots.
Il est nécessaire de se poser des questions tel que "Comment reconnais-t'on une phrase en général?", "Comment reconnais-t'on les mots?", ...

Pour répondre à ces questions (qui vont être la base de notre programme) je vais vous faire une liste des choses à savoir :

  • Une phrase se termine par un point.
  • Les mots sont séparé par un espace.

Et voilà, vous connaissez les deux choses les plus importante pour faire ce programme!
Tout d'abord nous allons réaliser un programme simple qui compte les mots tant que le point de fin n'a pas été mis. Et à l'intérieur de ce programme on va compter le nombre d'espace (qui va donner le nombre de mots).

Voici une capture d'écran du programme une fois qu'il sera terminé :

exemple du programme compteur de mots

Comme vous pouvez le voir, en bonus cette application va pouvoir calculer la taille du mot le plus grand.

retour en haut

Pratique

Cette partie va résumer toute la réalisation du programme. Tout sera détaillé (sauf ce qui a déjà été vu sur des programmes précédents) dans le but que vous compreniez au mieux. Courage, il y a presque rien de nouveau.

Bibliothèque

Pour éviter toute erreur j'ai pour habitude d'appeler ces 3 bibliothèques :

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

L'appel de ces bibliothèques seront les premières lignes de tout notre code.

Initialisation des variables

Au tout début de la fonction principale, il est nécessaire d'initialiser les variables. Il y en a 4 en tout :

int nbr_mots = 0; /* Comptabilise le nombre de mots */
int fin_boucl = 0; /* =1 lorsque le point à été détecter (car fin de la phrase) */
int taille = 0; /* Taille du mot le plus grand */
int taille_mot = 0; /* Taille du mot actuel */
char c; /* Touche pressé */

Chacune des variables à été commentés, alors je ne pense pas qu'il soit nécessaire les expliquer une nouvelle fois. Et comme un programme vaut mieux qu'un long discours, je vais passer directement à la suite : la partie principale du code que nous réalisons.

Partie principale

On va commencer par mettre une phrase bateau qui indique à l'utilisateur du programme ce qu'il doit faire :

printf("Saisir une phrase, terminee par un point.\n");

Juste après il convient de réaliser une boucle while dans laquel on va effectuer toutes les manipulations. Cette boucle va continuer tant que "fin_boucl" est différent de 1 (pour rappel lorsque fin_boucl est à 1 c'est que la phrase est finie).

La première chose que va contenir se "while" sera l'attente que l'utilisateur presse une touche. Et ça sera réalisé à l'aide de la fonction : "getche()".
Voici alors ce que l'ont peut dire pour le moment :

printf("Saisir une phrase, terminee par un point.\n");

while (fin_boucl !=1)
{
c = getche ();

/* Suite du programme */
}

A partir de ce premier code, on peut avoir dans la variable "c" le contenu de la touche pressé. On va alors faire une instruction conditionnelle if si "c" est différent d'un espace ou non.

Explication :
Si "c" est différente de l'espace, alors on incrémente "taille_mot" qui est la taille du mot actuel. Cette valeur sert à savoir la taille du mot actuellement tapé par l'utilisateur. J'expliquerais après comment faire cette petite option en plus.
Malheureusement, si "c" est pas un espace alors c'est peut-être un point (qui signifira que c'est la fin de la boucle). Il faut donc vérifier cela.
Sinon (si "c" est un espace) il faut compter comme un mot supplémentaire et remettre "taille_mot" à 0 pour le prochain mot.

Allez, je vous ai assez torturé les méninges, voici maintenant la partie restante du code :

printf("Saisir une phrase, terminee par un point.\n");

while (fin_boucl !=1)
{
c = getche ();

if (c!=' ')
{
taille_mot++;
if ((taille<taille_mot) && (c != '.') && (c !=','))
taille=taille_mot;
if (c == '.')
fin_boucl=1;
}
else
{
nbr_mots++;
taille_mot=0;
}
}

Explication :
La taille du mot le plus grand est comptabilisé uniquement sans prendre en compte le point et la virgule. Et la taille maximum est mise à jour uniquement si la taille du mot maximum est inférieur à la taille du mot actuel.
Et il y a bien entendu la variable "fin_boucl" qui est mise à 1 si on a détecté un point.

Afficher le résultat

Il ne reste plus qu'à afficher le résultat à travers deux printf :

printf("\nLe nombre de mots dans la phrase est de : %d\n", nbr_mots+1);
printf("le mot le plus grand est compose de : %d lettres\n", taille);

A noter que le nombre de mot dans une phrase correspond au nombre d'espace plus 1.
Exemple : "le_petit_chat_est_blanc" contient 4 espaces et donc 5 mots.

Et voilà, nous avons tout complété. Pour avoir le programme en entier, rendez-vous ci dessous.

retour en haut

Programme final

Voici tout le programme que vous pouvez copier et coller sur votre logiciel de compilation :

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

int nbr_mots = 0; /* Comptabilise le nombre de mots */
int fin_boucl = 0; /* =1 lorsque le point à été détecter (car fin de la phrase) */
int taille = 0; /* Taille du mot le plus grand */
int taille_mot = 0; /* Taille du mot actuel */
char c; /* Touche pressé */

printf("Saisir une phrase, terminee par un point.\n");

while (fin_boucl !=1)
{
c = getche ();

if (c!=' ')
{
taille_mot++;
if ((taille<taille_mot) && (c != '.') && (c !=','))
taille=taille_mot;
if (c == '.')
fin_boucl=1;
}
else
{
nbr_mots++;
taille_mot=0;
}
}

printf("\nLe nombre de mots dans la phrase est de : %d\n", nbr_mots+1);
printf("le mot le plus grand est compose de : %d lettres\n", taille);
system ("pause");
return 0;

Idée d'amélioration

Ce petit programme est assez simpliste et peux comporter des bugs. Il est encore possible d'ajouter plein de corrections et petites améliorations. Voici une liste non-exhaustive des idées possibles pour continuer à travailler sur ce programme :

  • Prendre en compte si il y a plusieurs espaces entre deux mots.
  • Prendre en compte si l'utilisateur rentre juste un point (aucun mot).
  • Prendre en compte la touche entré du clavier.
  • Prendre en compte la touche supprimé du clavier.
  • ...
retour en haut

Télécharger le programme

Voici un petit tableau pour télécharger le programme au complet. Vous pouvez ainsi le tester et voir si votre programme est ressemblant au mieux.

Attention cependant, j'ai fais un programme un peu amélioré. Si vous souhaitez faire les améliorations vous même, je vous conseil de chercher un peu, sinon vous aurez les réponses en regardant mon code source.
Nom Description exemple programme code en .c code en .txt Difficulté
Compteur de mots simple Compte le nombre de mot dans une phrase simple. exemple programme programme en .c programme en .txt etoile pleine
Compteur de mots Compte le nombre de mot dans une phrase.
Prend en compte les virgules, les retours à la ligne, ...
exemple programme programme en .c programme en .txt etoile pleine
retour en haut