樸素的模式匹配演算法BF
阿新 • • 發佈:2020-11-23
1 #include <iostream> 2 using namespace std; 3 int BF(char S[], char T[]); 4 int main() 5 { 6 char s1[100], s2[10]; 7 int index = 0; 8 cout << "請輸入主串:" << endl; 9 cin >> s1; 10 cout << "請輸入模式串:" << endl; 11 cin >> s2; 12 index = BF(s1, s2);13 if (index==0) 14 { 15 cout << s2 << "不是" << s1 << "的子串" << endl; 16 17 } 18 else 19 { 20 cout << s2 << "在" << s1 << "的位置是"<<index << endl; 21 } 22 return 0; 23 } 24 int BF(char S[], char T[])25 { 26 int start = 0;//主串從下標0開始第一趟匹配 27 int i= 0,j=0;/*設定比較的起始下標*/ 28 while ((S[i]!='\0')&&(T[j]!='\0')) 29 { 30 if (S[i]==T[j]) 31 { 32 ++i; ++j; 33 } 34 else 35 { 36 i = i - j + 1, j = 0;//start++; i = start; j = 0;/*i和j分別回溯*/37 } 38 } 39 if (T[j]=='\0') 40 { 41 return i - j + 1;//start + 1;//返回本趟匹配的起始位置(不是下標) 42 } 43 else 44 { 45 return 0; 46 } 47 }