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 :
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
}
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
Merci d'avance les amis