字符串:BF算法
话不多少,先上代码
int getchars(char arr[],char brr[]);
int main() //程序入口,主函数,从这里开始执行
{
char arr[]="asdasdase";//主串赋值
char brr[]="ase";//子串赋值
int result = getchars(arr,brr);//定义一个接收调用函数
if(result==-1)
{
printf("匹配失败\n");
}
else
{
printf("匹配成功,在第%d个位置",result);
}
}
int getchars(char arr[],char brr[])
{
int i=0;//主串下标
int j=0;//子串下标
while(i<strlen(arr)&&j<strlen(brr))//下标长度小于字符串长度
{
if(arr[i]==brr[j])
{
i++;//主串下标++
j++;//子串下标++
}
else
{
i=i-j+1;//主串下标回退
j=0;//子串重新归0
}
}
if(j==strlen(brr))//如果子串下标==子串长度(证明子串已经匹配成功)
{
return i-j+1;//匹配成功返回成功的位置
}
else
{
return -1;//匹配失败 返回-1
}
}
解题思路
模式匹配法解题思路(又名暴力解法)
1.定义下标赋值为0
2.while循环小标小于字符数组长度
3.如果两数相等,则字符下标相加 不相等则主串下标为i=i-j+1 j=0
- 小提示:虽然使用BF算法能够实现匹配功能,但效率太低了,时间复杂度为O(n*m),感兴趣的小伙伴可以去看一下KMP算法