Contar las ocurrencias de caracteres en una cadena

¿Cómo puedo contar el número de "_" en una cadena como "bla_bla_blabla_bla" ?

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

Pseudocódigo:

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

EDITAR: código de ejemplo C ++:

 int count_underscores(string s) { int count = 0; for (int i = 0; i < s.size(); i++) if (s[i] == '_') count++; return count; } 

Tenga en cuenta que este es el código para usar junto con std::string , si está utilizando char* , reemplace s.size() con strlen(s) .

También tenga en cuenta: Puedo entender que quiere algo "lo más pequeño posible", pero le sugiero que use esta solución. Como puede ver, puede usar una función para encapsular el código para que no tenga que escribir el bucle for cada vez, pero puede usar count_underscores("my_string_") en el rest de su código. Usar algoritmos avanzados de C ++ es ciertamente posible aquí, pero creo que es exagerado.

Solución anticuada con variables apropiadamente nombradas. Esto le da al código algo de espíritu.

 #include  int _(char*__){int ___=0;while(*__)___='_'==*__++?___+1:___;return ___;}int main(){char*__="_la_blba_bla__bla___";printf("The string \"%s\" contains %d _ characters\n",__,_(__));} 
 #include  std::string str = "a_b_c"; int cnt = boost::count(str, '_'); 

Lo que sea … Versión Lambda … 🙂

 using namespace boost::lambda; std::string s = "a_b_c"; std::cout << std::count_if (s.begin(), s.end(), _1 == '_') << std::endl; 

Necesitas varios incluye ... Te dejo como un ejercicio ...

Hay varios métodos de std :: string para buscar, pero probablemente encuentre lo que está buscando. Si te refieres a una cadena estilo C, entonces el equivalente es strchr. Sin embargo, en cualquier caso, también puede usar un bucle for y verificar cada carácter: el bucle es esencialmente lo que estos dos cierran.

Una vez que sepa cómo encontrar el siguiente personaje dado una posición de inicio, avanzará continuamente en su búsqueda (es decir, usará un bucle), contando a medida que avanza.

Contar las ocurrencias de caracteres en una cadena es fácil:

 #include  using namespace std; int main() { string s="Sakib Hossain"; int cou=count(s.begin(),s.end(),'a'); cout< 

Puede encontrar la ocurrencia de ‘_’ en la cadena de fuente mediante el uso de funciones de cadena. La función find () toma 2 argumentos, first-string cuyas ocurrencias queremos averiguar y el segundo argumento toma la posición inicial. El ciclo WHILE se usa para averiguar la ocurrencia hasta el final de la cadena fuente.

ejemplo:

 string str2 = "_"; string strData = "bla_bla_blabla_bla_"; size_t pos = 0,pos2; while ((pos = strData.find(str2, pos)) < strData.length()) { printf("\n%d", pos); pos += str2.length(); } 

Lo hubiera hecho de esta manera:

 #include  #include  using namespace std; int main() { int count = 0; string s("Hello_world"); for (int i = 0; i < s.size(); i++) //can't be i <= s.size() because s.at(s.size()) will result in overflow { if (s.at(i) == '_') count++; } cout << endl << count; cin.ignore(); return 0; } 
 std::string s = "a_b_c"; size_t count = std::count_if( s.begin(), s.end(), []( char c ){if(c =='_') return true; }); std::cout << "The count of numbers: " << count << std::endl; 

Hubiera hecho algo así 🙂

 const char* str = "bla_bla_blabla_bla"; char* p = str; unsigned int count = 0; while (*p != '\0') if (*p++ == '_') count++; 
 public static void main(String[] args) { char[] array = "aabsbdcbdgratsbdbcfdgs".toCharArray(); char[][] countArr = new char[array.length][2]; int lastIndex = 0; for (char c : array) { int foundIndex = -1; for (int i = 0; i < lastIndex; i++) { if (countArr[i][0] == c) { foundIndex = i; break; } } if (foundIndex >= 0) { int a = countArr[foundIndex][1]; countArr[foundIndex][1] = (char) ++a; } else { countArr[lastIndex][0] = c; countArr[lastIndex][1] = '1'; lastIndex++; } } for (int i = 0; i < lastIndex; i++) { System.out.println(countArr[i][0] + " " + countArr[i][1]); } } 

Tratar

 #include  #include  using namespace std; int WordOccurrenceCount( std::string const & str, std::string const & word ) { int count(0); std::string::size_type word_pos( 0 ); while ( word_pos!=std::string::npos ) { word_pos = str.find(word, word_pos ); if ( word_pos != std::string::npos ) { ++count; // start next search after this word word_pos += word.length(); } } return count; } int main() { string sting1="theeee peeeearl is in theeee riveeeer"; string word1="e"; cout<