Recherche du caractere avec le plus d'occurences dans une chaine [version 2, tout compilateur]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 927 fois - Téléchargée 38 fois

Contenu du snippet

Ce programme cherche via la fonction nbrocc le caractere ayant le plus d'occurence dans une chaine (de type string), cette même fonction regarde ensuite s'il y a des ex-aequo et enfin retourne une structure "int-int-char" à l'apellant.

Source / Exemple :


#include <iostream>
#include <string>

using namespace std;

struct occurence
{
int nbrocc;
int idem;
char lettre;
};

occurence nbrocc(string s) {
  int alpha[255]={0};            // Tableau pour comptabiliser les caracteres 
  for(int i=0;i<(int)s.size();i++)  // Pour chaque caractere de la string  
  {
    for(int b=0;b<255;b++) // Pour chaque caractere ANSI
  {
    if(s[i]==(char)32) // Si le caractere est un espace on le neutralise
s[i]=0;
    else if(s[i]==(char)b) // Sinon on l'index
alpha[b]++;
  }  
}
occurence occ={0};
for(int i=0;i<255;i++)
  {
if(alpha[i]>occ.nbrocc) // On recherche le caractere avec le plus d'occurences
  {
occ.nbrocc=alpha[i]; 
occ.lettre=(char)i;  
}
}
for(int i=0;i<255;i++) // On regarde s'il y a des ex-aequo
  {
    if((alpha[i]==occ.nbrocc)&&(i!=occ.lettre)) 
      occ.idem++;
  }
return(occ);
}

int main()
{
string s1;
cout << "Entrez une chaine :\n";
getline(cin,s1);
occurence occ=nbrocc(s1); // On initialise une structure avec nbrocc
if(occ.idem!=0)  // Si il y a des ex-aequo
  cout << "Plusieurs caracteres sont ex-aequo sur le plus gros nombre d'occurences (" << occ.nbrocc << "), nottamment " << "\"" << occ.lettre << "\"\n";
else 
  cout << "Le caractere ayant le plus d'occurence (" << occ.nbrocc << ") est " << "\"" << occ.lettre << "\"\n";
}

Conclusion :


Vous pouvez très facilement modifier cette source pour ne prendre en compte que certains caracteres (par exemple uniquement les lettres de l'alphabet).

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.