int occurrences = 0;
string::size_type start = 0;
while ((start = base_string.find(to_find_occurrences_of, start)) != string::npos) {
++occurrences;
start += to_find_occurrences_of.length(); // see the note
}
string::find
toma una cadena que debe buscar en el objeto invocante y (en esta sobrecarga) una posición de carácter en el que para empezar a buscar, y devuelve la posición de la aparición de la cadena, o string::npos
si la cadena no se encuentra
Las variables start
comienza en 0 (el primer carácter) y en la condición del bucle, se utiliza para contar start
find
dónde empezar a buscar, a continuación, asignar el valor de retorno de find
a start
. Incrementar el recuento de ocurrencias; ahora que start
mantiene la posición de la cadena, puede omitir to_find_occurrences_of.length()
caracteres más adelante y comenzar a buscar de nuevo.
drhirsch hace que el punto de que si
to_find_occurrences_of
contiene una secuencia repetida de caracteres, haciendo
start += to_find_occurrences_of.length()
puede saltar algunas ocurrencias. Por ejemplo, si
base_string
era
"ffff"
y
to_find_occurrences_of
era
"ff"
, entonces solo se contarían 2 ocurrencias si agrega
to_find_occurrences_of.length()
a
start
. Si se quiere evitar que, en lugar de añadir al menos 1
to_find_occurrences_of.length()
a
start
, y en ese ejemplo, 3 apariciones serían contados en lugar de sólo 2.
@ BjörnPollex removió las etiquetas # C-secuencias – DreamCodeer