[c++] nombres de couples le d'une phrase
Résolu
benoit456
-
lirey83 Messages postés 75 Date d'inscription Statut Membre Dernière intervention -
lirey83 Messages postés 75 Date d'inscription Statut Membre Dernière intervention -
bonjour. J'ai un petit meme gros probleme pour un exercie en c++ je dois compter le nombre de couples LE d'une phrase terminée par un point.
j'ai essayé quelque chose mais cela ne me donne rien!
voila ce que j'ai tenté:
#include<iostream.h>
void main() {
int etat=1,cpt=0;
char c;
c=cin.get();
while(etat!=4){
switch(etat){
case1:switch(c){
case'l':etat=2;
break;
case'.':etat=4;
break;
default:etat=1;
break;}
break;
case2: switch(c){
case'e':etat=3;
break;
case'.':etat=4;
break;
default:etat=1;
break;}
break;
case3:cpt++;
switch(c){
case'l':etat=2;
break;
case'.':etat=4;
break;
default:etat=1;
break;}
break;
}
c=cin.get();
}
cout<<cpt++;
}
Aidez moi svp!
benoit456
j'ai essayé quelque chose mais cela ne me donne rien!
voila ce que j'ai tenté:
#include<iostream.h>
void main() {
int etat=1,cpt=0;
char c;
c=cin.get();
while(etat!=4){
switch(etat){
case1:switch(c){
case'l':etat=2;
break;
case'.':etat=4;
break;
default:etat=1;
break;}
break;
case2: switch(c){
case'e':etat=3;
break;
case'.':etat=4;
break;
default:etat=1;
break;}
break;
case3:cpt++;
switch(c){
case'l':etat=2;
break;
case'.':etat=4;
break;
default:etat=1;
break;}
break;
}
c=cin.get();
}
cout<<cpt++;
}
Aidez moi svp!
benoit456
A voir également:
- [c++] nombres de couples le d'une phrase
- Vérifier si une phrase est correcte - Accueil - Google
- Code binaire des nombres - Guide
- Mettre une phrase en majuscule - Guide
- Tapez cette phrase, en respectant bien les espaces et la ponctuation. - Guide
- Nombre de jours entre deux dates excel - Guide
8 réponses
C'est quoi ce que tu appelles un couple LE ? Il peut y avoir des mots entre deux mots "LE" ? Que se passe t'il si tu as un nombre impair de mot "LE" ? Peux-tu donner quelques exemples de phrases et le résultat que tu attends ?
En C++ pour les std::string il y a une méthode très intéressante pour toi, c'est la méthode find :
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Bonne chance
En C++ pour les std::string il y a une méthode très intéressante pour toi, c'est la méthode find :
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Bonne chance
Yep beaucoup plus :)
Alors ca se fait trivialement avec un find comme je te disais. Le find peut débuter à partir d'un index (n° de caractère de la chaine), donc à chaque fois que tu trouves un find il suffit de repartir de cet index+2.
Jète un oeil au site que je t'ai donné dans le post précédent, tu vas voir c'est facile, pas besoin de faire un automate.
Bonne chance
Alors ca se fait trivialement avec un find comme je te disais. Le find peut débuter à partir d'un index (n° de caractère de la chaine), donc à chaque fois que tu trouves un find il suffit de repartir de cet index+2.
Jète un oeil au site que je t'ai donné dans le post précédent, tu vas voir c'est facile, pas besoin de faire un automate.
Bonne chance
Salut
Y a des million de manière de procéder ... plus ou moins sophistiqué !
En voici une avec des pointeurs fonctionnant sur une seule phrase ...
int compte(char *phrase)
{
int i = 0;
int compteur = 0;
char *le;
// Pointeur sur le début de la phrase
le = phrase;
while (i<strlen(phrase))
{
if ((*le == 'l') && (*(le+1) == 'e')) compteur++;
le++;
i++;
}
return compteur;
}
int main()
{
char *phrase = "le lendemain elle etait toujours sur le banc.";
cout << "Il y a " << compte(phrase) << " 'le' dans la phrase" << endl;
getchar();
}
Y a des million de manière de procéder ... plus ou moins sophistiqué !
En voici une avec des pointeurs fonctionnant sur une seule phrase ...
int compte(char *phrase)
{
int i = 0;
int compteur = 0;
char *le;
// Pointeur sur le début de la phrase
le = phrase;
while (i<strlen(phrase))
{
if ((*le == 'l') && (*(le+1) == 'e')) compteur++;
le++;
i++;
}
return compteur;
}
int main()
{
char *phrase = "le lendemain elle etait toujours sur le banc.";
cout << "Il y a " << compte(phrase) << " 'le' dans la phrase" << endl;
getchar();
}
Mais a la place d'utiliser
while (i<strlen(phrase))
{
if ((*le == 'l') && (*(le+1) == 'e')) compteur++;
le++;
i++;
j'ai pris plutot
while (*le != 0)
{
if ((*le == 'l') && (*(le+1) == 'e')) compteur++;
le++;
}
et j'ai donc supprime int i = 0;
Donc si il ya moyen que tu m'explique un peu cela serai bien gentil.
salutations
benoit456
while (i<strlen(phrase))
{
if ((*le == 'l') && (*(le+1) == 'e')) compteur++;
le++;
i++;
j'ai pris plutot
while (*le != 0)
{
if ((*le == 'l') && (*(le+1) == 'e')) compteur++;
le++;
}
et j'ai donc supprime int i = 0;
Donc si il ya moyen que tu m'explique un peu cela serai bien gentil.
salutations
benoit456
Salut Benoit
Le C++ et les pointeurs sont indissociables ! et on arrive facilement à écrire des choses totalement illisible !!
Dans le cas présent, faut savoir qu'en C les chaines de caractères sont simplement identifiées par l'adresse du premier caractère, la fin de la chaîne étant matérialisé par un 0.
char *toto indique donc que toto est une chaîne de caractère (note que cela ne donne aucune information sur sa longueur). (*toto) indique donc le premier caractère (* étant l'opérateur de déréférencement qui permet d'accéder au contenu de la case mémoire pointée).
Dans le cas présent, j'ai une variable "le" qui "pointe" sur le premier caractère de la phrase que l'on teste : *le == 'l'.
(le+1) pointe sur le caractère suivant, que l'on teste aussi *(le+1) == 'e'.
Si les 2 tests sont bons, on a donc trouvé un 'le' et on incrémente le compteur.
On itère le processus jusqu'à la fin de la chaîne repéré par un 0 (boucle while ou for)
J'espère que c'est plus clair !
Le C++ et les pointeurs sont indissociables ! et on arrive facilement à écrire des choses totalement illisible !!
Dans le cas présent, faut savoir qu'en C les chaines de caractères sont simplement identifiées par l'adresse du premier caractère, la fin de la chaîne étant matérialisé par un 0.
char *toto indique donc que toto est une chaîne de caractère (note que cela ne donne aucune information sur sa longueur). (*toto) indique donc le premier caractère (* étant l'opérateur de déréférencement qui permet d'accéder au contenu de la case mémoire pointée).
Dans le cas présent, j'ai une variable "le" qui "pointe" sur le premier caractère de la phrase que l'on teste : *le == 'l'.
(le+1) pointe sur le caractère suivant, que l'on teste aussi *(le+1) == 'e'.
Si les 2 tests sont bons, on a donc trouvé un 'le' et on incrémente le compteur.
On itère le processus jusqu'à la fin de la chaîne repéré par un 0 (boucle while ou for)
J'espère que c'est plus clair !
tu peux d'ailleurs simplifier le while par :
while (*le != 0) { if ((*le == 'l') && (*(le+1) == 'e')) compteur++; le++; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
merci cela réponds assez bien à ma question mais il ya juste une chose, a quoi sert ( int compte(char *phrase) ) et getchar?
Un grand merci.
Salutations.
benoit456
merci cela réponds assez bien à ma question mais il ya juste une chose, a quoi sert ( int compte(char *phrase) ) et getchar?
Un grand merci.
Salutations.
benoit456
he bien "int compte(char *phrase) " est la déclaration de la fonction et getchar sert juste à stopper le défilement de l'écran en attendant que l'utilisateur appuie sur "Entrée"
En relisant ton essai de code, je me suis dit que tu voulais peut-être compter les 'le' au fur et à mesure que l'on tapait la phrase. Dans ce cas, voilà une solution :
void main() { int cpt = 0; char c; bool un_l = false; while ((c = cin.get()) != '.') { if (un_l && (c == 'e')) cpt++; un_l = (c == 'l'); } cout << "Il y a " << cpt << " 'le' dans la phrase." << endl; }
enfet voila je dois compter le nombre de fois qu'un Le suit un E pour former un couple LE. le couple peut se trouver n'importe ou dans la phrase.
ex: Le lendemain elle etait toujours sur le banc. Elle etait si belle.
donc, ici dans la première phrase il y a 4 couples LE et dans la seconde, il y en a 2.
Je dois donner le nombre de couples LE dans chaque phrase et ensuite je dois les totaliser.
J'espere que c'est un peu plus clair.
Merci pour ton aide.
salutations.
benoit456