2011-12-23 13 views

Respuesta

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

+0

se saltará algunos "ocurrencias" si _to_find_occurances_of_ consta de caracteres o secuencias repetidas. – hirschhornsalz

+0

@drhirsch gracias, actualizado –

+0

@SethCarnegie gracias, está funcionando. – DreamCodeer

1
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
     string str("BF;1;2;3;FF;10;20;30;BF;11;;22;33;FF;100;200;300;BF;110;;220;330;FF;1000;2000;3000"); 
     string str2 ("BF"); 
     size_t found; 

     // different member versions of find in the same order as above: 
     found=str.find(str2); 
//print 

      return 0; 
} 
+0

Gracias. Han usado el primero. – DreamCodeer

+0

¿Qué es size_t aquí? –

3

Aquí el código para encontrar ocurrencia de cadena en cadena con Buscar definido por el usuario función

int Find(char OrgStr[], char szFind[]); 

void main(){ 
    int iCount = Find("babbabaab ab", "ab"); 
    //cout<<"No of 'abe' : " << iCount <<endl; 

} 

int Find(char orgStr[], char findStr[]){  
    int i,j,k,l,szLen,orgLen; 
    char temp[] = " "; 

    orgLen = strlen(orgStr); 
    szLen = strlen(findStr); 

    k= 0; 
    i = 0; 
    l = 0; 

    while(l < orgLen) 
    { 
     i = (orgLen - (orgLen - l)); 
     for(j = 0; j < szLen; j++) 
     { 
      temp[j] = orgStr[i];    
      i++; 
     } 
     temp[j] = '\0'; 
     if(strcmp(temp,findStr) == 0) 
     { 
      k++; 
     } 
     strcpy(temp,""); 
     l++; 
    } 
    cout<<"No of 'ab' : " << k <<endl; 
    return k; 
    //strcpy(temp,""); 
}  
+0

¡Funciona a la perfección! Gracias1 – G21

Cuestiones relacionadas