最近我給了一個任務,用於查找另一個字符串中出現的字符串的數量,類似於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;
}
我在網上找到的代碼幾乎是相同的,但我的程序似乎從來沒有找到一個匹配,即使有一個。上面的例子有兩個。我的邏輯是讓我作爲mainstring的索引和j作爲子串的索引。那麼如果來自子字符串的所有字符都匹配從主要字符串開始的字符,則在該索引處找到模式。
對於你的內循環放(j = 0; j
我剛剛打印出什麼j當我在循環 –
沒有解決問題? – DragonBallz