strstr ( ) 字符串判断包含函数 的C语言具体实现

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 算法理解实现,特别棒

           https://blog.csdn.net/starstar1992/article/details/54913261

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值