IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Compter la fréquence d'un caractère dans une chaine


Sujet :

C++

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut Compter la fréquence d'un caractère dans une chaine
    Salut à tous,

    je voudrais savoir comment faire pour compter le nombre de vois que se répete un caractère dans une chaine. Et surtout qu'elle est la méthode la plus performante. (Système de boucle, expression régulière...?).

    Merci d'avance!

  2. #2
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    salut Death83,
    comment faire pour compter le nombre de vois que se répete un caractère dans une chaine
    il s'agit lpus d'un problème d'algo qu'autre chose!
    je vais te mettre sur la voie: tu as la classe String dans cette classe tu peut récupérer la taille de ta chaine! avec la fonction size()
    ensuite tu peut récupérer un caractère grâce à la fonction charat(int index) qui te rentourne un char
    Il te suffit de bouclé sur le nombre de caractères que tu as dans ta chaine et de faire les tests si le caractère à déjà été lu, alors on l'insert dans un conteneur sinon on on increment un compteur de lettre!
    Tu peut faire une classe compteur de lettre et ou ton conteneur ( comme les vecteurs) contiendrai des objets du type compteur!

    A la fin de ta boucle tu n'as plus qu'à tester quel objet compteur à l'entier le plus grand.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class compteur
    {
         public:
              int compteur;
              char lettre;
    }

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 266
    Points : 6 688
    Points
    6 688
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    en utilisant la SL, on peut faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int CountChar(const std::string &string_to_parse, const char &char_to_find)
    {
    	int count = 0;
    	size_t pos = string_to_parse.find(char_to_find, 0);
    	while (pos<string_to_parse.size())
    	{
    		count++;
    		pos = string_to_parse.find(char_to_find, pos+1);
    	}
    	return count;
    }
    Ca fonctionne, cependant, il doit certainement être possible de faire plus efficace.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string str = "bonjour !";
    int n = std::count(str.begin(), str.end(), 'o');
    Ou 'o' est le caractère à rechercher par exemple

  5. #5
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Fiquet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string str = "bonjour !";
    int n = std::count(str.begin(), str.end(), 'o');
    Ou 'o' est le caractère à rechercher par exemple
    Merci je vais essayer ca (ca à l'air d'être la méthode la plus simple ).

Discussions similaires

  1. [SQL] Compter le nombre de caractères dans une chaine
    Par VuVietHai dans le forum SAS Base
    Réponses: 3
    Dernier message: 08/09/2014, 14h48
  2. Compter le nombre de caractères dans une chaine
    Par Delabrfi dans le forum Langage
    Réponses: 2
    Dernier message: 11/03/2014, 22h28
  3. Réponses: 2
    Dernier message: 18/04/2008, 17h19
  4. Compter un certain caractère dans une chaine.
    Par illuzmax dans le forum Débuter
    Réponses: 16
    Dernier message: 07/04/2006, 17h37
  5. Réponses: 8
    Dernier message: 08/06/2004, 02h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo