2011-12-23 20 views

risposta

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 prende una stringa da cercare nell'oggetto invocando e (in questo sovraccarico) una posizione di carattere in cui per iniziare la ricerca, e restituisce la posizione della occorrenza della stringa, o string::npos se la stringa non è stata trovata.

La variabile start parte da 0 (il primo carattere) e nella condizione del ciclo, si utilizza start dire find dove iniziare a cercare, quindi assegnare il valore di ritorno di find a start. Incrementa il conteggio delle occorrenze; ora che start mantiene la posizione della stringa, puoi saltare i caratteri to_find_occurrences_of.length() e ricominciare a guardare.


drhirsch fa il punto che se to_find_occurrences_of contiene una sequenza ripetuta di caratteri, facendo start += to_find_occurrences_of.length() può saltare alcuni eventi. Ad esempio, se base_string era "ffff" e to_find_occurrences_of era "ff", allora si contano solo 2 occorrenze se si aggiunge to_find_occurrences_of.length() a start. Se si vuole evitare che, aggiungere 1 invece di to_find_occurrences_of.length()- start, e in questo esempio, 3 occorrenze sarebbero contati invece di 2.

+0

salterete alcuni "occorrenze" se _to_find_occurances_of_ si compone di caratteri o sequenze ripetute. – hirschhornsalz

+0

@drhirsch grazie, aggiornato –

+0

@SethCarnegie grazie, il suo funzionamento. – 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

Grazie. Ho usato il primo. – DreamCodeer

+0

Che cos'è size_t qui? –

3

Qui il codice per trovare stringa di occorrenza nella stringa con definito dall'utente Find funzione

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

Funziona perfettamente! Thanks1 – G21

Problemi correlati