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   -
Bonjour,

#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:

2 réponses

VanDog Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   13
 
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
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
0
VanDog Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   13
 
Autrement, ton code (qui me paraît pas forcément des mieux construits mais tu ne viens pas pour ça ^^) dit :
 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
0