2011-12-23 5 views
11

C++で文字列内の文字列を検索する方法は?C++でstringの文字列を検索する方法は?

ここにシナリオがあります。

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

は、タグ#_to_find_occurances_of_が繰り返された文字やシーケンスで構成されている場合は、いくつかの「回出てくる」スキップします – 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開始(最初の文字)とループの状態では、あなたがどこ探し始めるfindを伝えるためにstartを使用し、その後、startfindの戻り値を割り当てます。発生回数を増やします。 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に追加すると2回だけカウントされます。あなたはそれを避けたい場合は、 startに1の代わりに、 to_find_occurrences_of.length()を追加し、その例では、3つの出現は、ユーザー定義の検索で文字列内の文字列のoccuranceを見つけることだけではなく、ここで

+0

C-の文字列を削除しました。 – 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

2.コードでカウントされます機能Bjö[email protected]

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

完璧に動作します!ありがとう1 – G21

関連する問題