veces una repite repetidos repetidas que programa palabras palabra letras letra las ejemplos dev cuente cuantas contar contador caracteres cadenas cadena c++ string pattern-matching

una - contar palabras repetidas en c++



Contar las ocurrencias de caracteres en una cadena (11)

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


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.


La respuesta es fácil y creo que debes seguir mientras calculas en tu cerebro o libro. El código ya está dado, es por eso que no lo repito.

Acabo de reorganizar el código superior:

#include <bits/stdc++.h> using namespace std; int main() { string s="Sakib Hossain"; int cou=count(s.begin(),s.end(),''a''); cout<<cou; }


Lo hubiera hecho de esta manera:

#include <iostream> #include <string> 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; }


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 ...


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 resto de su código. Usar algoritmos avanzados de C ++ es ciertamente posible aquí, pero creo que es exagerado.


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(); }


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

#include <cstdio> int _(char*__){int ___=0;while(*__)___=''_''==*__++?___+1:___;return ___;}int main(){char*__="_la_blba_bla__bla___";printf("The string /"%s/" contains %d _ characters/n",__,_(__));}


Tratar

#include <iostream> #include <string> 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<<word1<<" occurs "<<WordOccurrenceCount(sting1,word1)<<" times in ["<<sting1 <<"] /n/n"; return 0; }


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


#include <boost/range/algorithm/count.hpp> std::string str = "a_b_c"; int cnt = boost::count(str, ''_'');


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]); } }