模拟实现C语言--strstr函数

模拟实现C语言–strstr函数


一、strstr函数是什么?

在目标字符串中寻找字符串

char * strstr ( const char *str1, const char * str2);

根据语法结构,参数是指针,返回的类型也是指针
如果找到了,就会返回其所在的地址,如果没找到,就会返回NULL

二、使用示例

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>

int main()
{
	char arr1[] = "abbbbcdef";
	char arr2[] = "bbc";
	char* ret = strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("找不到\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

在这里插入图片描述

三、模拟实现

3.1 模拟实现1

在这里插入图片描述
如果直接让str1和str2相互比较,往后寻找的话,当str2不符合条件的时候,那么bbc就要继续从b开始和str1进行比较,但是str2的地址已经改变了,找不到b原来的地址了,所以就需要找两个指针来帮着往后移动
在这里插入图片描述

s1代替str1移动,s2代替str2移动,cp的作用是当第一次寻找失败的时候,第二次寻找开始的位置应该是第二个字符的位置,cp就是记录每一次寻找起始位置的指针,cp++就是下一轮寻找的起始位置
寻找最终的停止条件是字符串最后位置的’\0’,一旦出现,就说明其中或者全部的字符串已经寻找完毕了

char *  strstr (const char * str1, const char * str2)
{
        char *cp = (char *) str1;
        char *s1, *s2;
        if ( !*str2 )//如果str2上来就是空字符串的话,那就直接将str1返回
            return((char *)str1);
        while (*cp)//停止条件就是找到\0了,找到它就相当于找到末尾了
       {
                s1 = cp;
                s2 = (char *) str2;//强制类型转换的目的是为了一个字符一个字符的向后移动
                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;
                if (!*s2)
                        return(cp);
                cp++;
       }
        return(NULL);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值