Relevé des occurences dans un tableau
voici un programme permettant de relevé le nombre d'occurences reprises dans un mot ou une phrase.
Par exemple si je tape le prénom "philippe" le programme me retournera
e->1
h->1
i->2
l->1
p->3
Je souhaiterais introduire les 2 lignes suivantes dans le programme principal plutôt que dans une fonction membre mais je ne réussis pas à trouver les bons paramètres. Par contre lorsque les 2 lignes de programmation figurent dans la fonction membre int encodage_phrase(int); il n'y a aucun problème. Quelqu'un aurait-il une idée de quelle façon solutionner ce problème ? Merci d'avance.
Les lignes posant problèmes sont en gras dans le programme.
cin.getline(phrase, LONG, '\n');
longueur_phrase = strlen(phrase);
#include <iostream>
using namespace std;
//using namespace std;
const int LONG = 10; // longueur maximale de la phrase lue
class Phrase{
private:
char* phrase;
int occurence[26];
int max;
static int compteur;
public:
Phrase(int);
static int combien();
void occu(int);
void affichage_occurence(int);
int encodage_phrase(int);
void affichage_phrase(int);
void nombre_occurence(int, int);
void affichage_occu(int);
};
int Phrase::compteur = 0;
//constructeur
Phrase::Phrase(int n){
max = n;
phrase = new char[n];
compteur = compteur + 1;
};
//compteur actionné lors de chaque appel de phrase
int Phrase::combien(){
return compteur;
};
//initialisation du tableau "occurence" à 0
void Phrase::occu(int n_a){
int i = 0;
for(i = 0; i < n_a; i++){
occurence[i] = 0;
};
};
//affichage du tableau occurence initialisé à 0
void Phrase::affichage_occurence(int n_a){
int i;
for(i = 0; i < n_a; i++){
cout << i << ". " << occurence[i] << endl;
};
};
//encodage d'un mot ou d'une phrase dans le tableau "tableau"
int Phrase::encodage_phrase(int LONG){
int longueur_phrase = 0;
cin.getline(phrase, LONG, '\n');
longueur_phrase = strlen(phrase);
cout << "longueur_phrase = " << longueur_phrase << endl;
return longueur_phrase;
};
//affichage du mot ou de la phrase
void Phrase::affichage_phrase(int l_p){
int i;
for(i = 0; i < l_p; i++){
cout << phrase[i];
};
};
//calcul des lettres dans le tableau "occurence"
void Phrase::nombre_occurence(int l_p, int nbr_alph){
int i;
for(i = 0; i < l_p; i++){
if(('a' <= phrase[i]) && (phrase[i] <= 'z')){
occurence[phrase[i] - 'a']++;
};
};
};
//après le calcul des occurences voici l'affichage du tableau "occurence"
void Phrase::affichage_occu(int nbr_alph){
int i;
for(i = 0; i < nbr_alph; i++){
if(occurence[i] != 0){
cout << (char) (i + 'a') << "--> " << occurence[i] << " occurence(s)" << endl;
};
};
};
int main ()
{
int nbr_alph = 26;
int m = 10;
int longueur_phrase;
Phrase* ph = new Phrase(LONG);
cout << "initialisation des occurences" << endl;
ph->occu(nbr_alph);
cout << "affichage des occurences" << endl;
ph->affichage_occurence(nbr_alph);
cout << "veuillez encodez votre phrase" << endl;
//cin.getline(ph->phrase, LONG, '\n');
longueur_phrase = ph->encodage_phrase(LONG);
ph->affichage_phrase(longueur_phrase);
cout << endl;
ph->nombre_occurence(longueur_phrase, nbr_alph);
cout << "voici les occurences" << endl;
ph->affichage_occu(nbr_alph);
return 0;
}
//le programme fonctionne mais n'est pas encore terminé