[c++] nombres de couples le d'une phrase
Résolu/Fermé
benoit456
-
30 déc. 2006 à 21:45
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 - 3 janv. 2007 à 19:49
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 - 3 janv. 2007 à 19:49
A voir également:
- [c++] nombres de couples le d'une phrase
- Mettre une phrase en majuscule - Guide
- Rémi et safia ont découvert le code binaire des nombres en cours d'informatique. ils l'utilisent pour se donner des rendez-vous secrets. ils ont décidé que : un message comporte 5 bits et donne le jour puis le moment les jours et les moments sont traduits par les nombres comme ci-dessous - Forum Programmation
- Code binaire des nombres - Guide
- Le nombre de tentatives de déverrouillage incorrectes est trop élevé samsung ✓ - Forum Samsung
- Le fichier contient le nombre de voyageurs dans 3 gares. dans la cellule b5, saisissez une formule qui calcule le total et se met à jour si on change une valeur du tableau. quel total obtenez-vous ? quelle formule avez-vous saisie ? ✓ - Forum Excel
8 réponses
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
1 janv. 2007 à 23:36
1 janv. 2007 à 23:36
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
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
2 janv. 2007 à 14:40
2 janv. 2007 à 14:40
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
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
2 janv. 2007 à 14:48
2 janv. 2007 à 14:48
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();
}
benoit456
Messages postés
7
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007
2 janv. 2007 à 22:56
2 janv. 2007 à 22:56
Bonjour,
merci bcp pour ton aide tu as vraiment repondu à mon attente, mais saurai-tu m'expliquer un peu le fonctionnement stp pcq je n'ai jamais travaillé avec des pointeurs.
Si pas ce n'est pa grave.
Encore un grand merci.
Salutations.
benoit456
merci bcp pour ton aide tu as vraiment repondu à mon attente, mais saurai-tu m'expliquer un peu le fonctionnement stp pcq je n'ai jamais travaillé avec des pointeurs.
Si pas ce n'est pa grave.
Encore un grand merci.
Salutations.
benoit456
benoit456
Messages postés
7
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007
2 janv. 2007 à 23:00
2 janv. 2007 à 23:00
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
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
3 janv. 2007 à 11:12
3 janv. 2007 à 11:12
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 !
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
3 janv. 2007 à 12:28
3 janv. 2007 à 12:28
Je suis d'ailleurs toujours surpris de trouver des écritures toujours plus compacte :
Bon, là je crois que l'on peut pas faire plus court !!
int compte(char *phrase) { int compteur = 0; for (char *le = phrase; *le; le++) if ((*le == 'l') && (*(le+1) == 'e')) compteur++; return compteur; }
Bon, là je crois que l'on peut pas faire plus court !!
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
2 janv. 2007 à 14:54
2 janv. 2007 à 14:54
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
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
2 janv. 2007 à 21:49
2 janv. 2007 à 21:49
Voire :
for(le = phrase;*le !='\0';++le){ if ((*le == 'l') && (*(le+1) == 'e')) compteur++; }
benoit456
Messages postés
7
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2007
3 janv. 2007 à 12:08
3 janv. 2007 à 12:08
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
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
3 janv. 2007 à 12:35
3 janv. 2007 à 12:35
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"
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
3 janv. 2007 à 19:49
3 janv. 2007 à 19:49
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; }
2 janv. 2007 à 11:31
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