Compter les nombres de mots dans une chaine
Bonjour,
Je suis confronté à un problème d'algorithmie, je voudrais m'entrainer à faire un programme qui compte les mots d'une phrase, sachant qu'un mot est séparé par un espace ou un '_'. Ce que je compte faire c'est regarder si la case de l'indice sur lequel ma boucle est vaut un espace ou un '_' et si la case de l'indice suivant est différente d'un espace ou d'un '_' (donc est une lettre ou un chiffre) alors cela est compté pour un mot.
J'ai fais le code suivant qui ne renvoi aucune erreur mais m'affiche :
Citation:
Nombre de mots : 0 Entrez la phrase à tester
Mon programme compte bien car la phrase revient autant de fois qu'il y a des mots !
Code:
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 <string>
#include <cctype>
#include <iostream>
using namespace std;
namespace
{
unsigned CompterNombreMots(string chaine)
{
unsigned NombreDeMots = 0;
for(unsigned i = 0; i < chaine.size() - 1; i++)
{
if (((chaine[i] == ' ') || (chaine[i] == '_')) && ((chaine[i+1] != ' ') || (chaine[i+1] != '_')))
{
NombreDeMots++;
}
}
return NombreDeMots;
}
}
int main ()
{
for (;;)
{
cout << "Entrez la phrase à tester : " << endl;
string chaine;
cin >> chaine;
if (chaine == "") break;
cout << "Nombre de mots : " << CompterNombreMots(chaine);
}
return 0;
} // main() |
Merci de votre aide.