Comment puis-je compter le nombre de "_"
dans une chaîne comme "bla_bla_blabla_bla"
?
c++
string
pattern-matching
andre de boer
la source
la source
Réponses:
la source
std::count
renvoie le typeiterator_traits<InputIt>::difference_type
, ce qui n'eststd::ptrdiff_t
pas le cas pour la plupart des conteneurs standardstd::size_t
.Pseudocode:
EDIT: exemple de code C ++:
Notez que c'est du code à utiliser avec
std::string
, si vous utilisezchar*
, remplacezs.size()
parstrlen(s)
.Notez également: je peux comprendre que vous souhaitiez quelque chose de "aussi petit que possible", mais je vous suggère d'utiliser cette solution à la place. Comme vous le voyez, vous pouvez utiliser une fonction pour encapsuler le code pour vous afin que vous n'ayez pas à écrire la
for
boucle à chaque fois, mais que vous pouvez simplement l'utilisercount_underscores("my_string_")
dans le reste de votre code. L'utilisation d'algorithmes C ++ avancés est certainement possible ici, mais je pense que c'est exagéré.la source
Solution à l'ancienne avec des variables nommées de manière appropriée. Cela donne au code un peu d’esprit.
Edit: environ 8 ans plus tard, en regardant cette réponse, j'ai honte de l'avoir fait (même si je me suis justifié comme un coup sarcastique à une question à faible effort). C'est toxique et pas correct. Je ne supprime pas le message; J'ajoute ces excuses pour aider à changer l'atmosphère sur StackOverflow. Alors OP: je m'excuse et j'espère que vous avez bien fait vos devoirs malgré ma pêche à la traîne et que des réponses comme les miennes ne vous ont pas découragé de participer sur le site.
la source
la source
Vous l'appelez ... Version Lambda ... :)
Vous avez besoin de plusieurs inclusions ... Je vous laisse cela comme un exercice ...
la source
L'utilisation de la fonction lambda pour vérifier que le caractère est "_", puis seul le nombre sera incrémenté sinon un caractère non valide
la source
[]( char c ){if(c =='_') return true; }
invoque un comportement indéfini car vous n'avez pas renvoyé de valeur dans tous les chemins de codeIl existe plusieurs méthodes de recherche de std :: string, mais find est probablement ce que vous recherchez. Si vous voulez dire une chaîne de style C, alors l'équivalent est strchr. Cependant, dans les deux cas, vous pouvez également utiliser une boucle for et vérifier chaque caractère - la boucle est essentiellement ce que ces deux terminent.
Une fois que vous savez comment trouver le personnage suivant à partir d'une position de départ, vous avancez continuellement votre recherche (c'est-à-dire utilisez une boucle), en comptant au fur et à mesure.
la source
Compter les occurrences de caractères dans une chaîne est simple:
la source
Vous pouvez trouver l'occurrence de '_' dans la chaîne source à l'aide des fonctions de chaîne. La fonction find () prend 2 arguments, la première chaîne dont nous voulons connaître les occurrences et le second argument prend la position de départ. Pendant que la boucle est utilisée pour trouver l'occurrence jusqu'à la fin de la chaîne source.
exemple:
la source
J'aurais fait comme ça:
la source
J'aurais fait quelque chose comme ça :)
la source
Essayer
la source
la source