Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

Bonjour,

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

  1. string test = "Voici un ? test";


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.

Autres pages sur : compter nombre mots string

Lassé par la pub ? Créez un compte

ben programme toi meme ta fonction de recherche/parsing

genre un truc comme ca:


  1. // voir commentaire de Rodolphe
  2.  
  3. char c;
  4. int mots = 0;
  5. for (i = 0; i < strlen(str); ++i)
  6. {
  7. c = str[i];
  8. if (c = ' ' && i + 1 < strlen(str))
  9. {
  10. if (!MyCharListCmp(str[i + 1], ",.;:!?`'"))
  11. {
  12. ++mots;
  13. }
  14. }
  15. }
  16.  
  17. bool MyCharListCmp(char c, const char* s)
  18. {
  19. bool found = false;
  20. for (int i = 0; i < strlen(s); ++i)
  21. {
  22. if (s[i] == c)
  23. {
  24. found = true;
  25. break;
  26. }
  27. }
  28. return found;
  29. }


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

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.
Lassé par la pub ? Créez un compte