J'ai un petit problème pour compte le nombre d'occurence dans un texte
Exemple du texte :
Lady Montague, wife to Montague.
Lady Capulet, wife to Capulet.
Juliet, daughter to Capulet.
Nurse to Juliet.
J'arrive à diviser chaque ligne en petites chaines :
"Lady","Montague,","wife","to","Montague".
Avec ce bout de code :
void frequenceMot(char* buffer){
int i;
for(i=0;buffer[i]!='\0';i++)
{
if(buffer[i]!=' ')
{
printf("%c",buffer[i]);
}
else printf("\n");
}
}
Je souhaiterais faire l'analyse sur tous les mots.
Une liste est construite pour contenir tous les mots, avec dans chaque maillon, le mot, sa taille, le nombre d’occurrences et le pointeur vers le suivant.
En fait, la procédure fréquence mot prend en compte un seul mot par "appel" et analyse si :
-Le mot est déja dans une liste, occurence = occurence +1
-Le mot est nouveau (donc n'est pas dans la liste), alors la liste "s'agrandie" avec le mot, sa taille et son occurrence.
Et ca pour tout le texte afin d'afficher un résultat comme ceci :
Le mot 'Juliet' est présent 100 fois soit 32% (exemple)
Voila le "debut" du code qui semble correspondre à ce que je recherches :
Spoilervoid ajouterFin(char* chaine){
mot_item* element= new mot_item;
// On fixe la valeur de l'élément
element->mot = chaine;
element->taille = sizeof(chaine);
element->occurence = element->occurence + 1;
element->suivant = liste;
liste = element;
}
mot_item* recherche(char* chaine){
mot_item* element = liste;
while(element != NULL && element->chaine != chaine){
element = element->suivant;
}
if(element->chaine = chaine){
chaine->occurence = chaine->occurence +1;
}
afouterFin(chaine)
}
// Cette procédure permet d'obtenir dans une chaine, la meme chose que pour les caractères a savoir, le mot, son nombre d'apparitions et le pourcentage d'utilisation par rapport au reste du texte
void frequenceM(char* chaine){
int i;
struct mot_item{
char* mot ; // pointer vers le mot
int taille; // taille du mot
int occurence; // compteur occurence
mot_item *suivant; // pointe vers le prochain element de la chaine , si c'est le
//dernier alors il est à null
};
mot_item* liste = NULL;
liste->mot = chaine;
liste->taille = sizeof(chaine);
liste->occurence = 0;
liste->suivant = NULL;
if(liste->mot != buffer){
ajouterFin(buffer);
}else{
recherche(buffer);
}
}
Merci d'avance pour votre aide.