数据结构上虽然有该算法大概的实现,但是字符串并不是C的字符串,Terry R. McConnell也写过一个,但是在next数组中,我认为有问题,所以我自己写了一个kmp查找子串,C的字符串风格
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void set_next(const char* substr,int* next)
{
int k,i;
if(strlen(substr)==1){
next[0]= 0 ;
return;
}
next[0] = 0;
next[1] = 0;
for(i=1,k=0;i<(strlen(substr)-1);i++){
while(k&&(substr[k]!=substr[i]))
k = next[k];
if(substr[k]==substr[i]){
k++;
next[i+1] = k; /*set the next element's next!!*/
}else{
next[i+1] =