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";
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";
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
を使用し、その後、start
にfind
の戻り値を割り当てます。発生回数を増やします。 start
が文字列の位置を保持するようになると、to_find_occurrences_of.length()
文字をスキップして再度検索を開始できます。
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を見つけることだけではなく、ここで
C-の文字列を削除しました。 – hirschhornsalz
@drhirschありがとう、更新済み –
@SethCarnegieありがとうございました。 – DreamCodeer
#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;
}
ありがとうございます。最初のものを使いました。 – DreamCodeer
ここにsize_tとは何ですか? –
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,"");
}
完璧に動作します!ありがとう1 – G21
は、タグ#_to_find_occurances_of_が繰り返された文字やシーケンスで構成されている場合は、いくつかの「回出てくる」スキップします – DreamCodeer