1.设计思想
2.代码实现及解释
3,。测试用例
一.设计思想
1.同时向后跑
2.如果相等 i++,j++;
3.如果不相等 i=i-j+1;j=0;
二.代码实现
int BF_Search(const char*str,const char *sub,int pos){
//str主串,sub字串,从主串pos下标开始向后查找
assert(str!=NULL&&sub!=NULL&&pos>=0&&pos<strlen(str));
if(str==NULL||sub==NULL||pos<0||pos>=strlen(str)){
return -1;
}
int lenstr=strlen(str);//保存主串的长度
int lensub=strlen(sub);//保存字串的长度
int i=pos,j=0;//i-->主串匹配时的下标 j->保存字串匹配时的下标
while(i<lenstr&&j<lensub){//当主串和字串没有走出范围
if(str[i]==sub[j]){//相等 i++j++,判断下一个字符
i++;
j++;
}
else{//代表失配,则让i回退到这一次匹配前的位置的下一位,j归0
i=i-j+1;
j=0;//这两行顺序不能反
}
}
//此时循环结束,两种可能,判断i和j谁走到尾吧
//判断i和j谁走到尾,
//字串j走到尾部代表匹配成功了
if(j>=lensub){
return i-j;//回到匹配前的位置
}
else{
return -1;
}
//如果字串j没走到尾巴,那代表主串没有字串想要的,则返回-1;
}
三.测试用例
int main(){
const char *str="ababcabcdabcde";//主串
const char*sub="abcd";
int tmp=BF_Search(str,sub,0);
printf("%d\n",tmp);
return 0;
}