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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.