[C++] - Compter nombre de mots dans un string

xmilitancex

Expert
Bonjour,

J'essaye de calculer le nombre de mots dans un string.
Exemple si j'ai

[cpp]string test = "Voici un ? test";[/cpp]

Je veux que cela me dise que ce string contient 3 mots.
En effet les ponctuations seule ne doivent pas compter pour un mot. (,.;`¸^!&*?!"/) etc.

C'est ca qui fait que c'est compliqué, si ce ne serait que trouver le nombre de mot en incluant ca ce serait facile.

Je sais que les fonctions isspace et ispunct (#include <ctype.h>) sont utiles hors je suis complètement incapable de pensé l'algorithme pour le réaliser.

merci d'une quelconque aide.
 

Lightness1024

Nouveau membre
ben programme toi meme ta fonction de recherche/parsing

genre un truc comme ca:


[cpp]

// voir commentaire de Rodolphe

char c;
int mots = 0;
for (i = 0; i < strlen(str); ++i)
{
c = str;
if (c = ' ' && i + 1 < strlen(str))
{
if (!MyCharListCmp(str[i + 1], ",.;:!?`'"))
{
++mots;
}
}
}

bool MyCharListCmp(char c, const char* s)
{
bool found = false;
for (int i = 0; i < strlen(s); ++i)
{
if (s == c)
{
found = true;
break;
}
}
return found;
}
[/cpp]

bon chai pas si c'est correct mais je pense que tu captes l'idée generale, voila !
 

Rodolphe

Habitué
Lightness1024> Ta solution ne marche que si la chaine est corectement formatée. Si le signe de ponctuation n'est pas précédé d'un espace ou qu'il y a 2 espace de suite tu compte pas le mot.

Moi je passerai plutôt par une étape de normalisation en remplaçant tous les signes par des espaces, en réduisant les espaces contigus à 1 et en supprimant les espaces en début et fin de chaine.
Ensuite il ne reste plus qu'a compter le nombre d'espace et a ajouter 1 à ce nombre pour avoir le nombre mots.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 000
Membres
1 586 387
Dernier membre
ouistititouille
Partager cette page
Haut