J'ai mon deuxième devoir pour la classe C++ qui inclut les chaînes de Markov. Le devoir est simple mais je n'arrive pas à trouver la meilleure implémentation pour lire les caractères d'un fichier.
J'ai un fichier d'environ 300k. L'une des règles du devoir est d'utiliser les classes Map et Vector. Dans Map (la clé est seulement une chaîne) et les valeurs seront les vecteurs. Lorsque je lis le fichier, je dois commencer à collecter les paires de clés.
Exemple :
File1.txt
1234567890
1234567890
Si on choisit Markov k=3, je devrais avoir dans ma carte :
key vector
123 -> 4
456 -> 7
789 -> 0
0/n1 -> 2
234 -> 5
567 -> 8
890 -> /n
/n -> NULL
La suggestion du professeur est de lire char par char, donc mon algorithme est le suivant
while (readchar != EOF){
tempstring += readchar
increment index
if index == Markovlevel {
get nextchar if =!EOF
insert nextchar value in vector
insert tempstring to Map and assign vector
unget char
}
}
J'omets quelques autres détails. Ma question principale est que si j'ai 318 000 caractères, je vais devoir faire le conditionnel à chaque fois ce qui ralentit beaucoup mon ordinateur (MAC pro tout neuf). Un exemple de programme du professeur exécute ce fichier en 5 secondes environ.
Je n'arrive pas à déterminer quelle est la meilleure méthode pour lire des mots de longueur fixe à partir d'un fichier texte en C++.
Merci !