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 le nombre de caractere dans une chaine


Sujet :

C++

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut Compter le nombre de caractere dans une chaine
    Je voudrais compter combien de fois le caractere ";" est repété dans une chaine string


    MERCI ET BONNE PROG :!!

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string toto = "toto";
    int c = std::count(toto.begin(), toto.end(), 'o');

  3. #3
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Merci pour cette reponse clair et rapide !!

  4. #4
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Est il possible de limiter count a une certaine partie de la chaine ??

    Je voudrais par exemple compter les ; entre la position 8 et 21

    MERCI ET BONNE PROG !!

  5. #5
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    tu remplaces cette liogne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int c = std::count(toto.begin(), toto.end(), 'o');
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int c = std::count(8, 21, 'o');

  6. #6
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par hiko-seijuro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int c = std::count(8, 21, 'o');
    ???

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const int pfirst = std::max(8, toto.size());
    const int plast = std::max(21, toto.size());
    const int c = std::count(toto.begin()+pfirst, toto.begin()+plast, 'o');
    Et dès que la contiguité des caractères dans les std::string aura été approuvée/entérinnée, on pourra officiellement écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const int c = std::count(&toto[pfirst], &toto[plast], 'o');
    qui est plus agréable à l'oeil et au doigt.

  8. #8
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Il y a des implémentations qui n'ont pas la continuïté ?

    Ca parait délicat d'offrir string::c_str() ( et même data() ) sans cela non ?

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Pas à ma connaissance.
    Ceci dit, il suffit que c_str() (et data()) réalloue(nt) à la volée une zone unique de caractères contigus. Il y a déjà cette possibilité avec c_str() pour s'assurer du 0-terminal à en lire la liste des fonctions invalidant pointeurs et itérateurs dans mes souvenirs. Après, je pense que pas grand monde n'ait estimé que cela vaille le coup d'avoir une string implémentée comme une deque. Trop d'interfaces à la C qui attendent des "const char*" peut-être ?

  10. #10
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    IMHO, le coût de l'allocation est prohibitif.

    Mais attendons que les sages ratifient la continuïté alors

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Et pourtant, j'ai déjà vu des codes du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::string chaine;
    char caractere=chaine[n];
    A vrai dire, la contiguité ne doit pas *forcément* etre entérinée... pour autant qu'une surcharge de l'opérateur [] l'aie été

    Et, finalement, sa surcharge ne devrait pas poser énormément de problèmes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char std::string::operator[](int index) const
    {
        if(index>0)
            return (Next->operator[](index-1);
        return *valeur_caractere;
    }
    peut y suffire

    Maintenant, encore faut il que ce genre de surcharge soit implémenté/entériné...

    Quelqu'un en sait il quelque chose du point de vue de l'entérination

  12. #12
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Sauf que ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const_reference operator[](size_type off) const;
    reference operator[](size_type off);
    La contiguité est un état de fait dans toutes les implémentations de la SL que je connaisse. Du coup, comme avec les vecteurs, en pratique on est en mesure d'avoir &c[0]+n == &c[n] -- au détail des proxies près. En théorie, on n'est pas sensés l'avoir.
    D'ailleurs, ces histoires de proxy me font dire que si l'écriture via l'opérateur [] est valable, c'est dans le meilleur des cas avec des chaines vues comme non modifiables.

    Le futur est par . Il me semble qu'un autre lien avait été donné il y a peu. Ce n'était pas Loufoque qui l'avait donné ?

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Quel type de lien ?

  14. #14
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Sur la contrainte de contiguité des caractères des strigs -- mais j'ai très bien pu mettre trompé, après une certaine heure, les noms se mélangent.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2009, 13h49
  2. compter le nombre de mots dans une chaine en php
    Par hadjiphp dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2009, 21h20
  3. Réponses: 4
    Dernier message: 04/03/2009, 10h18
  4. Compter le nombre d'occurence dans une chaine
    Par shirya dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2007, 20h39
  5. [Tableaux] compter le nombre de caractere d'une chaine
    Par phpaide dans le forum Langage
    Réponses: 3
    Dernier message: 01/06/2006, 15h00

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