247 votes

Compter les occurrences des caractères dans une chaîne

Comment est-ce que je peux compter le nombre de « _ » dans une chaîne comme « bla_bla_blabla_bla » ?

494voto

Benoit Points 35553
#include <algorithm>

std::string s = "a_b_c";
size_t n = std::count(s.begin(), s.end(), '_');

38voto

schnaader Points 26212

Pseudo-code:

count = 0
For each character c in string s
  Check if c equals '_'
    If yes, increase count

EDIT: C++ exemple de code:

int count_underscores(string s) {
  int count = 0;

  for (int i = 0; i < s.size(); i++)
    if (s[i] == '_') count++;

  return count;
}

Notez que ce code est à utiliser conjointement avec des std::string, si vous utilisez char*, remplacez - s.size() avec strlen(s).

À noter également: je peux comprendre que vous voulez quelque chose de "plus petit 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'aurez pas à écrire l' for boucle à chaque fois, mais peut simplement utiliser count_underscores("my_string_") dans le reste de votre code. À l'aide de C++ avancées des algorithmes est certainement possible ici, mais je pense que c'est exagéré.

29voto

Tamás Szelei Points 8660

Ancienne solution avec variables bien nommées. Cela donne le code certains esprit.

13voto

user1977268 Points 31
#include <boost/range/algorithm/count.hpp>

std::string str = "a_b_c";
int cnt = boost::count(str, '_');

9voto

Diego Sevilla Points 17274

Vous l’appelez... La version lambda...  :)

Vous avez besoin de plusieurs comprend... Je vous laisser cela comme un exercice...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X