最近、ctrl + fの働きと同様に、別の文字列にある文字列の出現数を見つけるための割り当てが与えられました。以下は私の実装ですが、コードのバグを検出しています。文字列の部分文字列の出現を見つけるか?なぜ私のプログラムは一致するものを印刷しないのですか?
#include<iostream>
using namespace std;
int findsubstr(string s, string substr);
int main(){
string a = "abcxyzcxy";
string b = "cxy";
cout << "number of matching found " << findsubstr(a, b) << endl;
return 0;
}
int findsubstr(string mainstring, string substr){
int i;
int count = 0;
if(substr.length() > mainstring.length()){
cout << "invalid string for matching!" << endl;
return 0;
}
for(i=0; i<mainstring.length(); i++){
int j;
for (j=0; j<substr.length(); j++){
if(mainstring[i+j] != substr[j]){
break;
}
}
if(j==substr.length()-1){
cout << "pattern found at " << i << endl;
count++;
}
}
return count;
}
私がオンラインで見つけたコードはほぼ同じですが、私のプログラムは一致しているとは思われませんでした。上記の例は2つです。私の論理は、私がメインストリングのインデックスとして、サブストリングのインデックスとしてjを持つことです。サブストリングからのすべての文字がメインストリングからのiで始まる文字と一致すると、パターンはそのインデックスにあります。
(j = 0; j
私はループ内にあったjを出力しました。問題を解決しなかった –
? – DragonBallz