Indiquer combien de fois la lettre a été trouvée dans le mot
dav-1994
Messages postés
107
Date d'inscription
Statut
Membre
Dernière intervention
-
VanDog Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
VanDog Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Le problème c'est que quand je tape un mot il m'affiche le nombre de lettre qu'il y a dans tout le mot, or moi je veux taper une lettre et qu'il me dise combien de fois la lettre a été trouvée.
Fonctionnalité
Il faut demander à l'utilisateur de saisir un mot et une lettre de l'alphabet. Le programme doit indiquer combien de fois la lettre a été trouvée dans le mot. Si elle n'a pas été trouvée, le message "La lettre x n'a pas été trouvée dans le mot xxxxx" doit être affiché.
Fonction
Il faut écrire une fonction qui compte le nombre de fois qu'une lettre apparait dans un mot. Attention, il ne faut pas faire de dinstinction entre minuscule et majuscule.
Entrées
La lettre à rechercher
Le mot dans lequel effectuer la recherche
Sorties
Le nombre de fois que la lettre a été trouvée dans le mot
Il faudra donc rechercher 2 lettres à chaque fois dans le mot : la lettre minuscule et la lettre majuscule correspondante. Il y a un écart de "32" entre une lettre majuscule et une lettre minuscule. Par exemple, le code ASCII de "a" est 97, alors que le code ASCII de "A" est 65.
EDIT: Précision du langage dans la coloration syntaxique.
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int Menu() { system("cls"); int choix; cout << "Voulez-vous : " << endl; cout << "1. Effectuer des operations arithmetiques " << endl; cout << "2. Manipuler une chaine de caracteres : " << endl; cout << "0. Quitter le programme : " << endl; cout << "Votre choix : "<< endl; cin >> choix; return choix; } float OP(float a, float b) { float res; cout << "Entrez deux nombres entiers : "; cin >> a >> b; while((a<-20||a>20)||(b<-20||b>20||b==0)) { cout << "Vous devez entrez un nombre compris entre -20 et 20" << endl; cout << "Entrez a nouveau deux nombres : " << endl; cin >> a >> b; } res=a+b; cout << res << endl; res=a/b; cout << res << endl; system("pause"); return res; } char CR(char l[], char m[]) { int i, nombre_de_lettre=0; cout << "Saisissez un mot : "; cin.ignore(); gets(m); cout << "Saisissez une lettre de l'alphabet : "; gets(l); for(i=0;i<strlen(m);i++) { if(strcmp((m),(l))==0) { nombre_de_lettre++; } } return i; } int main() { int choix; int a=0,b=0; char m[51],l[51]; do { choix=Menu(); switch(choix) { case 1 : OP(a,b); break; case 2 : CR(l,m); break; } }while(choix!=0); return 0; }C'est ça que je dois faire :
Le problème c'est que quand je tape un mot il m'affiche le nombre de lettre qu'il y a dans tout le mot, or moi je veux taper une lettre et qu'il me dise combien de fois la lettre a été trouvée.
Fonctionnalité
Il faut demander à l'utilisateur de saisir un mot et une lettre de l'alphabet. Le programme doit indiquer combien de fois la lettre a été trouvée dans le mot. Si elle n'a pas été trouvée, le message "La lettre x n'a pas été trouvée dans le mot xxxxx" doit être affiché.
Fonction
Il faut écrire une fonction qui compte le nombre de fois qu'une lettre apparait dans un mot. Attention, il ne faut pas faire de dinstinction entre minuscule et majuscule.
Entrées
La lettre à rechercher
Le mot dans lequel effectuer la recherche
Sorties
Le nombre de fois que la lettre a été trouvée dans le mot
Il faudra donc rechercher 2 lettres à chaque fois dans le mot : la lettre minuscule et la lettre majuscule correspondante. Il y a un écart de "32" entre une lettre majuscule et une lettre minuscule. Par exemple, le code ASCII de "a" est 97, alors que le code ASCII de "A" est 65.
EDIT: Précision du langage dans la coloration syntaxique.
A voir également:
- Indiquer combien de fois la lettre a été trouvée dans le mot
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Mot de passe bios perdu - Guide
2 réponses
Nous sommes dans le forum C++, je me permet donc te montrer une solution en C++ car ton code me semble plus être proche du C (j'y connais trop peu pour t'aider dans ce contexte).
Partons sur le parcourt d'un string pour compter le nombre de fois que la lettre arrive, j'utiliserai la méthode : tolower décite ici
Cela te convient-il ?
Edit suppression de la signature contraire à la charte
Partons sur le parcourt d'un string pour compter le nombre de fois que la lettre arrive, j'utiliserai la méthode : tolower décite ici
http://www.cplusplus.com/reference/cctype/tolower/.
// Je te laisse faire l'affichage utilisateur std::string mot; std::cin >> mot; char lettreVoulue; std::cin >> lettreVoulue; lettreVoulue = tolower(lettreVoulue) // on la prend forcément minuscule pour faciliter int compte = 0; // le résultat recherché // C++11 for ( char lettre : mot ) { // Autrement int taille = mot.size(); for( int i(0) ; i < taille; ++i) { char lettre = mot[i]; // Quoi qu'il en soit ça c'est commun if (lettre == lettreVoulue || lettre == lettreVoulue + 32 ) { compte ++; } } // fin pour
Cela te convient-il ?
Edit suppression de la signature contraire à la charte
Autrement, ton code (qui me paraît pas forcément des mieux construits mais tu ne viens pas pour ça ^^) dit :
or strcmp(str1, str2) compare littéralement les deux string.
strcmp( "test", "p") renvoie un nombre positif
strcmp( "test", "a") renvoie un nombre négatif
strcmp( "test", "test") renvoie zéro
d'après :
Dès lors, je pense que ce que tu voulais faire est plutôt :
ce qui revient à comparer deux char, donc pourquoi pas utiliser l'
Edit suppression de la signature contraire à la charte
if(strcmp((m),(l))==0) { nombre_de_lettre++; }
or strcmp(str1, str2) compare littéralement les deux string.
strcmp( "test", "p") renvoie un nombre positif
strcmp( "test", "a") renvoie un nombre négatif
strcmp( "test", "test") renvoie zéro
d'après :
http://www.cplusplus.com/reference/cstring/strcmp/
Dès lors, je pense que ce que tu voulais faire est plutôt :
if(strcmp((m[i]),(l))==0) // utilisant le i de la boucle for { nombre_de_lettre++; }
ce qui revient à comparer deux char, donc pourquoi pas utiliser l'
opérateur ==directement ? ^^
Edit suppression de la signature contraire à la charte