Voilà je suis sur un exercice d'un bouquin et je bloque un peu .
En fait l'exercice demande d'écrire un programme qui demande à l'utilisateur d'entrer une phrase puis qui écrit : Nombre de lettres a : x, nombre de lettres b : x, nombres de lettres c : x...
Voilà ce que j'ai pondu pour le moment (oui oui ça doit être très facile pour vous ^^) :
J'ai aussi essayé à l'aide de pointeurs mais ça marche encore moins bien et j'en vois pas l'utilité ^^
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 #include <iostream> using namespace std; int main() { const int TAILLE = 27; char lettres [TAILLE] = "abcdefghijklmnopqrstuvwxyz"; const int MAX = 200; char phrase [] = {0}; cout << "Entrez une phrase : "; cin.getline (phrase, MAX); for (int i = 0 ; i < 26 ; i++) //Boucle pour chaque lettre de l'alphabet { int total = 0; //Nombre d'une lettre for (int j = 0 ; phrase [j] != '\0' ; j++) //Analyse chaque élément de la phrase et ajoute 1 au compteur { //quand il trouve la lettre if (phrase [j] == lettres [i]) { ++total; } } cout << "Nombre de " << lettres [i] << " : " << total << endl; } char response; cin >> response; return 0; }
Mais regarder la première version, c'est celle qui marche le mieux.
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 #include <iostream> using namespace std; int main() { const int TAILLE = 27; char lettres [TAILLE] = "abcdefghijklmnopqrstuvwxyz"; char * lettrePtr = lettres; const int MAX = 200; char phrase [] = {0}, * phrasePtr = phrase; cout << "Entrez une phrase : "; cin.getline (phrase, MAX); for (; *lettrePtr != '\0' ; lettrePtr++) //Boucle pour chaque lettre de l'alphabet { int total = 0; //Nombre d'une lettre for (; *phPtr != '\0' ; phPtr++) //Analyse chaque élément de la phrase et ajoute 1 au compteur { //quand il trouve la lettre if (*phPtr == *lettrePtr) { ++total; } } cout << "Nombre de " << *lettrePtr << " : " << total << endl; } char response; cin >> response; return 0; }
Donc j'ai fait divers tests, ça marche bien quand on entre qu'une lettre. Par exemple si je rentre t il me mettra Nombre de t : 1.
Quelques problèmes : si je rentre plus de quatre fois la même lettre, il plante. Si par exemple je mets aaaa il me mettra bien "Nombre de a : " 4, mais si je mets aaaaa il plantera. Va savoir...
Autre problème, dès que j'entre des chaînes un peu plus longues (mais inférieures à la valeur max !), ben il fait un résultat bizarre, enfin vous allez voir, il remplace les lettres. Il met par exemple "Nombre de a", puis juste en dessous au lieu de "Nombre de b", il met "Nombre de m", ou "Nombre de ".
EDIT : par exemple écrivez a. Ca marche bien. ab : ca marche bien aussi. zabc ca marche bien aussi, zabc d là ca plante :/
Enfin testez le ce sera plus rapide ^^.
Enfin, j'aimerais pouvoir prendre en charge les majuscules aussi. Parceque là si je tape a A il me met que une fois a. J'avias pensé dans le if a rajouter un toupper ou une connerie comme ça.
Ensuite est-ce possible de rendre le code plus court, sans forcément deux boucles for et avec si possibles des techniques faciles (j'ai pas encore tout vu, je suis encore aux pointeurs là).
Et enfin, quelle utilité il y aurait à utiliser des pointeurs comme j'ai "essayé" de le faire dans le deuxième code.
Merci ^^.
Partager