标签:实现 pac ret char cout har c++ abc include
贴上源代码:
#include<iostream>
using namespace std;
int BF(char S[],char T[])
{
int i,j;
i = j = 0;
while(S[i]!='\0'&&T[j]!='\0'){
if(S[i]==T[i]){
i++;
j++;
}
else{
j = 0;
i = i-j+1;
}
}
if(T[j]=='\0')
return i -j+1;
else
return 0;
}
int main()
{
//BF
cout<<BF("abcabcccc","abc");
return 0;
}
这是一种低效的模式匹配算法。叫做BF算法。
主要思想十分简单:
图示如下:
画图的时候两个串的最后都有‘\0’!!!!因为字符串的最后一位不是‘\0’么 但是我一个不小心忘了画了 也懒得改图了。。你们知道就行。。。。
此时S[i]!=T[j]
进行“回溯”。
子串从头开始比较,主串往后挪一位开始比较。
此时还是S[i]!=T[j]
进行“回溯”。
子串从头开始比较,主串往后挪一位开始比较
以此类推。。。。
即,
if(S[i]==T[i]){
i++;
j++;
}
else{
j = 0;
i = i-j+1;
}
其中,i-j+1算的是i开头在的位置和j开头在的位置的差(即使i和j代表的字符相等时,同时++,也不会改变这个差)。再加上1就是再往后移一位。
依靠String实现的BF算法 C++
int BFstring(string MotherStr, string SonStr){
int i = 0, j = 0;
for(;(i != MotherStr.size()) && (j != SonStr.size());){
if(MotherStr[i] == SonStr[j]){
i++, j++;
}
else{
i = i - j + 1;
j = 0;
}
if(j == SonStr.size()){
return i - j + 1;
}
}
return 0;
}
标签:实现 pac ret char cout har c++ abc include
原文地址:https://www.cnblogs.com/juzijuziju/p/11832858.html