strstr ( )
char* strstr(const char* dest, const char* src);
为实现判断字符串 dest 中是否包含字符串 src
注: 返回值为指针类型 包含则: 返回dest中和src首元素相同元素的指针;
不包含:返回空指针(NULL)。
函数模拟实现图解:
注: 需设定好三个指向分别指向 dest 和 src 如下图 分别黑、红、蓝三个指针
三个指针分别指向dest和src的开始的位置
红指针和蓝指针一起移动并做比较,当红指针和蓝指针指向的内容不同时,黑指针加一如下图
此时黑指针和和红指针都指向b, 蓝指针重新指向src的起始位置
重复图二 和 图三 的步骤直到达到下图的条件
蓝指针指向了 '\0',条件达成。
函数模拟实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h> //使用断言函数必须包含头文件
#include <string.h>
char* my_strstr(const char* dest, const char* src)
//建议结合解释图来看
{
char* black_ptr = (char*)dest;
assert(dest != NULL);
assert(src != NULL);
assert(dest != '\0'); //判断字符串包含时如果字符串中只有 '\0'
assert(src != '\0'); //则必然包含,所以也许断言
while(*black_ptr)
{
char* red_ptr = black_ptr;
char* blue_ptr = (char*)src;
while(*red_ptr && *blue_ptr && *red_ptr == *blue_ptr)//表示图中的条件
{
red_ptr++;
blue_ptr++;
}
if(*blue_ptr == '\0')//当蓝指针指向'\0'时表示找到了
{
return black_ptr;
}
black_ptr++;
}
return NULL;
}
int main ()
{
char str1[1024] = "abcdefg";
char* str2 = "cde";
char* ret;
ret = my_strstr(str1, str2);
printf("my_strstr的结果为:%s\n", ret);
system("pause");
return 0;
}
KMP算法用来专门解决字符串包含的问题: 目前我还处于了解阶段,等以后掌握一定的按自己的理解写出来
给大家推荐大神写的 KMP 算法理解实现,特别棒