Bonjour,
dans le cadre de mon master, j'ai l'exercice suivant à faire. Je dois faire un compteur de voyelles. Mon code marche très bien pour les fichiers UTF-8 mais les caractères diacrités ne sont pas reconnus pour le Latin-1, seulement les voyelles normales. Avez-vous une idée pour m'aider ? Voici mon code :
La prof a mis dans l'exercice le meme texte mais dans un fichier en utf-8 et l'autre en latin-9 et donc j'ai 2 resultats differents haha
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 #include <iostream> //directive qui demande au préprocesseur d'inclure le fichier du flot d'entrée et sortie standard C++ #include <fstream> //pour lire à partir d'un fichier #include <string> //utilisation des objets string et ses methodes #include <cctype> using namespace std; //on utilise l'espace de noms de la biblioteque stantard C++ int main(void) //en-tete du programme principal { //ensemble des voyelles francaises string voyelles_ascii_min("aeiouy"); string voyelle_diac_min("àâéèêëîïôùûüÿ"); string voyelle_diac_maj("ÀÂÉÈÊËÎÏÔÙÛÜ"); string::size_type size_voyelles_diac = voyelle_diac_min.size(); string::size_type size_voyelles_ascii = voyelles_ascii_min.size(); string line; //nbvdiac = compteur de voyelles diacritées //nbvascii = compteur de voyelles ascii //nbcar = compteur de caracteres unsigned long nbvdiac(0), nbvascii(0), nbcar(0); //déclaration et instanciation d'un objet ifstream pour la lecture à partir d'un fichier ifstream text_file("fouilles_Lat9.txt"); //si un probleme s'est passé à l'ouverture (fichier inéxistant...) if(text_file.is_open() == false) { cout << "Erreur : le fichier ne peut pas etre chargé !" << endl; } //sinon, on continue else { //boucle while qui s'execute tant que la fin du fichier n'est pas atteinte. On lit le fichier ligne par ligne while (getline(text_file, line)) { //on incrémente le compteur de caracteres nbcar++; //on parcours chaque caractere de la ligne for (auto c : line) { //on voit si ca match avec une voyelle for (unsigned short i = 0; i < size_voyelles_diac; i++) { //d'abord ascii if (i < size_voyelles_ascii) { //si oui, on incremente le compteur et on sort de la boucle for if (tolower(c) == voyelles_ascii_min[i]) { nbvascii++; break; } //puis diacritées } //si oui, on incremente le compteur et on sort de la boucle for if (c == voyelle_diac_maj[i] || c == voyelle_diac_min[i]) { nbvdiac++; break; } } } } //on ferme le fichier par précaution (mais c'est dispensable) text_file.close(); //si nbchar == 0, le fichier est vide if (!nbcar) { cout << "Le fichier est vide" << endl; } //sinon, on affiche le nombre de lettres vocaliques à l'écran else { //on divise par deux car une lettre diacritée = 2 chars cout << "Nombre de lettres vocaliques : " << nbvascii + (nbvdiac / 2) << endl; } } return 0; //valeur transmise au système d'exploitation indiquant que l'exécution s'est déroulée normalement }
Merci d'avance les amis![]()
Partager