Je voudrais compter combien de fois le caractere ";" est repété dans une chaine string
MERCI ET BONNE PROG :!!
Je voudrais compter combien de fois le caractere ";" est repété dans une chaine string
MERCI ET BONNE PROG :!!
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');
Merci pour cette reponse clair et rapide !!
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 !!
tu remplaces cette liogne
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part int c = std::count(toto.begin(), toto.end(), 'o');
Code : Sélectionner tout - Visualiser dans une fenêtre à part int c = std::count(8, 21, '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
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');
qui est plus agréable à l'oeil et au doigt.
Code : Sélectionner tout - Visualiser dans une fenêtre à part const int c = std::count(&toto[pfirst], &toto[plast], 'o');
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 ?
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 ?
IMHO, le coût de l'allocation est prohibitif.
Mais attendons que les sages ratifient la continuïté alors
Salut,
Et pourtant, j'ai déjà vu des codes du genre de
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é
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 std::string chaine; char caractere=chaine[n];
Et, finalement, sa surcharge ne devrait pas poser énormément de problèmes:
peut y suffire
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; }
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
Sauf que ....
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 const_reference operator[](size_type off) const; reference operator[](size_type off);
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 là. Il me semble qu'un autre lien avait été donné il y a peu. Ce n'était pas Loufoque qui l'avait donné ?
Quel type de lien ?
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager