2011-12-23 22 views
11

सी ++ में स्ट्रिंग में स्ट्रिंग की घटनाओं को कैसे ढूंढें?सी ++ में स्ट्रिंग में स्ट्रिंग की घटनाओं को कैसे ढूंढें?

यहां परिदृश्य है।

string base_string = "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 to_find_occurances_of = "BF"; 
+0

@ BjörnPollex टैग निकालें # सी तार – DreamCodeer

उत्तर

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 प्रेरक वस्तु में देखने के लिए और (इस अधिभार में) एक चरित्र स्थान देता है जिसपर तलाश शुरू करने के लिए एक स्ट्रिंग लेता है, और स्ट्रिंग की घटना की स्थिति लौटाता है, या string::npos अगर स्ट्रिंग नहीं मिली है।

0 (पहला वर्ण) पर और पाश की हालत में चर start शुरू होता है, तो आप start का उपयोग जहां तलाश शुरू करने के लिए find बताने के लिए है, तो start को find की वापसी मान असाइन। घटना गिनती में वृद्धि; अब start स्ट्रिंग की स्थिति रखता है, तो आप to_find_occurrences_of.length() आगे वर्णों को फिर से शुरू कर सकते हैं।


drhirsch मुद्दा यह है कि अगर to_find_occurrences_of वर्णों की एक दोहराया अनुक्रम में शामिल है, start += to_find_occurrences_of.length() कर कुछ घटनाओं को छोड़ सकते हैं बनाता है। उदाहरण के लिए, यदि base_string "ffff" और to_find_occurrences_of "ff" था, तो to_find_occurrences_of.length() start पर to_find_occurrences_of.length() जोड़ने पर केवल 2 घटनाओं की गणना की जाएगी। आपको लगता है कि से बचने के लिए चाहते हैं, start को 1 के बजाय to_find_occurrences_of.length() जोड़ने के लिए, और कहा कि उदाहरण में, 3 घटनाओं उपयोगकर्ता परिभाषित ढूँढें से स्ट्रिंग में स्ट्रिंग घटना को खोजने के लिए सिर्फ 2.

+0

आप कुछ "आवृत्तियां" को छोड़ देगा, तो _to_find_occurances_of_ दोहराया वर्ण या दृश्यों के होते हैं। – hirschhornsalz

+0

@drhirsch धन्यवाद, –

+0

@SethCarnegie धन्यवाद, यह काम कर रहा है। – 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

धन्यवाद। पहले इस्तेमाल किया है। – DreamCodeer

+0

यहां size_t क्या है? –

3

यहाँ कोड के बजाय गिना जाएगा समारोह

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

पूरी तरह से काम करता है! Thanks1 – G21

संबंधित मुद्दे