1.从1开始数的版本(自然语言)
#include <string.h>
#include <stdio.h>
//BF算法
int BF(char s1[20], char s2[20], int pos)
{
int i = pos - 1;//下标值与自然语言转换
int j = 0;
while(i < strlen(s1) && j < strlen(s2))//若i和j都大于字符串的长度就结束循环
{
if(s1[i] == s2[j])
{
i++;
j++;
}
else//匹配失败时回溯
{
i = i - j + 1;//被匹配字符串右移1
j = 0;//匹配字符串初始化下标值
}
}
if(j >= strlen(s2))//联合上面的while进行对比
return i - strlen(s2)+1; //返回的是第一次匹配到的字符的下自然语言(则从1开始数)
return 1;
}
int main()
{
char s1[20] = "abcdabcdefg";
char s2[20] = "abcde";
int pos;
scanf("%d",&pos); //输入s1开始匹配的位置
printf("%d",BF(s1, s2, pos));//传入两个字符串及需要查找的s1开始匹配的位置
return 0;
}
2.从0开始数的版本(下标值)
#include <string.h>
#include <stdio.h>
//BF算法
int BF(char s1[20], char s2[20], int pos)
{
int i = pos;//初始化位置记录变量
int j = 0;
while(i < strlen(s1) && j < strlen(s2))//若i和j都大于字符串的长度就结束循环
{
if(s1[i] == s2[j])
{
i++;
j++;
}
else//匹配失败时回溯
{
i = i - j + 1;//被匹配字符串右移1
j = 0;//匹配字符串初始化下标值
}
}
if(j >= strlen(s2))//联合上面的while进行对比
return i - strlen(s2); //返回的是第一次匹配到的字符的下标值
return 0;
}
int main()
{
char s1[20] = "abcdabcdefg";
char s2[20] = "abcde";
int pos;
scanf("%d",&pos); //输入s1开始匹配的下标值
printf("%d",BF(s1, s2, pos));//传入两个字符串及需要查找的s1开始匹配的下标值
return 0;
}
附图(初始化):