KMP算法查找子串

目录

  • ​​KMP算法查找子串​​
  • ​​1、字符串形式​​
  • ​​2、字节流形式​​

1、字符串形式

代码实现:

char* my_strstr(const char* src, const char* dst)
{
const char* sp, *dp;

if(src == NULL || dst == NULL) return NULL;

while(*src != 0)
{
sp = src;
dp = dst;

while(*sp++ == *dp++)
{
if(*dp == 0) return (char *)src;
}

src++;
}

return NULL;
}

测试:

C语言strstr函数实现-KMP算法查找子串_查找子串

2、字节流形式

int mymatch(const void* src, uint32_t ssize, const void* dst, uint32_t dsize)
{
int i = 0, j = 0, k = 0;
const uint8_t* s;
const uint8_t* d;

for(i = 0; i < ssize; i++)
{
s = &(((const uint8_t *)src)[i]);
d = &(((const uint8_t *)dst)[0]);
for(k = 0; k < dsize; k++)
{
if(*d++ == *s++)
if(++j == dsize)
return i;
}
}

return (int)-1;
}

C语言strstr函数实现-KMP算法查找子串_字符串_02


ends…