C++ | comptage caractériel

Fermé
Arkan - 30 sept. 2008 à 10:20
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 - 30 sept. 2008 à 10:57
Bonjour a toutes et a tous,
J'ai un petit souci avec la finalisation d'un tp (IRIS) en c++.
Je doit faire un bête programme de comptage de voyelle, consonne, ponctuation, chiffre et mot, et je n'arrive pas a faire le comptage de mot. Je pensais utiliser les espaces du style:

if (phrase[i] == isspace(\x20))
{
compteur_mot++;
// compteur_mot initialisé a 1, partant du principe qu'on commence une phrase par un mot
}



Le souci est que si l'utilisateur a l'esprit un peu dérangé ou qu'il fait une simple faute de frappe en mettant deux espace a la suite, le comptage n'est plus viable. J'ai pensé par la suite faire un test de la phrase jusqu'a \0 et supprimer les espaces multiples pour n'en laisser plus qu'un entre deux mots differents, mais je ne vois pas comment m'y prendre. Pourrai-je avoir votre aide?


Le comptage des voyelles, consonnes etc ce fait de manière toute bête en utilisant des tableaux de char!

3 réponses

Malheureusement tu ne m'apprend rien la, mon souci n'est uniquement ici que la manière de compter des mots dans une phrase. Le reste ça marche correctement, je me suis pas encore penché de comment l'optimiser mais ce sera le but de la suite du tp. Je préfère fonctionner avec l'organisation du prof plutôt que d'aller trop vite. (sinon je pense déjà que j'aurai utiliser des classes pour faire ça, s'aurai été plus simple.
0
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
30 sept. 2008 à 10:42
Problème de base du premier étage de l'analyseur lexicale d'un compilateur :
reperer les mots etc...

Avoir une chaine contenant tous les séparateurs de mots : unsigned char sep[]=" ,.;:/!?\'{([)})"""=+*"; //etc

faire une bloucle et considérer la longueur du mot, un mot vide n'est pas un mot. Une phrase vide ma fois pourquoi pas.

La bloucle (puisque je l'ai écris ainsi :-)) ) est dans une fonction qui cherche un mot, celle ci est dans une boucle (ce coup ci) qui s'rrêtera en fin de phrase (ou de texte) c'est dans celle ci que tu compte

la fonction cherche_mot compte les voyelles les consonnes mais beaucoup d'autres choses (symboles rencontrés)

Pour les voyeles et consonne défint aussi deux tableaux
char voyelles="aeiouyAEIOUY123456_-"
char consonnes="bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ"

quand tu lis un char dans la phrase tu le compare au contenu de sep, voyelles ou de consonnes grace à la fonction standard (<string.h>) char *strchr(cs,c) (cs étant le pointeur de la chaine sep ou voyelles ou consonnes, c étant le caractère lu)

On peut faire mieux avec un fonctionnement en switch()case et une structure d'automate qui saura lire des mots des nombres des réels... dans une boucle

Bon TP je t'en dis pas plus c'est toi qui apprends pas moi
-1
jihelge Messages postés 71 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 4 octobre 2008 7
30 sept. 2008 à 10:57
si tu tiens compte de la longueur des mot les mots vides ne seront pas comptés car tu aura de toute façon le problème avec un espace derrière une virgule etc.
-1