函数实现之------strstr

本文介绍了C语言中实现strstr函数的过程,详细讲解了函数逻辑,包括如何查找字符串子串,何时返回子串起始地址及何时返回NULL。通过循环和指针操作,确保在母串中找到子串的匹配部分。
摘要由CSDN通过智能技术生成

前言:

这是我第一次遇到的逻辑相对来说比较绕的一个函数,希望这篇可以让我更好的去理解

代码如下:

#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* s1,const char*s2)
{
	assert(s1&&s2);
	const char* str1 = s1;
	const char* str2 = s2;
	const char* cut = s1;
	while (*cut)
	{
		str1 = cut;
		str2 = s2;
		while ((*str1 != '\0') && (*str2 != '\0') && (*str1 == *str2))
		{
			str1++;
			str2++;
		}
		cut++;
		if (*str2 == '\0')
		{
			return cut;
		}
	}
	return NULL;
}
int main()
{
	char* arr1 = "abcedf";
	char* arr2 = "abc";
	char* ret = my_strstr(arr1, arr2);
	if (ret == NULL)
		printf("子串不存在\n");
	else
		printf("yes");
	return 0;
}

首先这个函数的返回值是个指针,如果arr2是arr1中的一个子串,那么返回的是子串的起始地址,反之返回空指针即--NULL。

函数的基本逻辑如下

利用循环完成

while ((*str1 != '\0') && (*str2 != '\0') && (*str1 == *str2))
        {
            str1++;
            str2++;
        }
        cut++;

这个循环毋庸置疑是比较好懂的,要保证每个指针指向的字符不为\0,如果发现子串的第一个字符和母串的第一个字符相等就要去判断下一个(字母串指针各向后跳一个),如果不等,那么母串指针就向后跳一个。

if (*str2 == '\0')
        {
            return cut;
        }

我们来看这个判断条件,循环结束后我们判断是否已经判断完子串中所有的字符,如果是的话,那么条件成立

const char* str1 = s1;
    const char* str2 = s2;
    const char* cut = s1;
    while (*cut)

我们来看看这些代表的意思

前三个是为了在判断完后可以保留地址以便用来返回

我们来看这个循环

    while (*cut)

最初是s1即母串地址,while ((*str1 != '\0') && (*str2 != '\0') && (*str1 == *str2))
        {
            str1++;
            str2++;
        }
        cut++;

如果母串第一个字符和子串不相等则母串+1然后再次赋给str1

如果*cut为\0了,那么说明母串找完了也没有找到对应的字符,那么返回空指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值