strstr 函数的 实现

本文详细探讨了strstr函数的实现原理,通过逐字符比较,在字符串中查找子串出现的位置。当遇到不匹配的情况时,会重新调整起始位置进行下一轮匹配。如果在字符串末尾找到匹配,返回匹配点,标志着匹配成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随工作越长,基础编程能力明显下降了很多,连 strstr 函数的实现都花费了 很长时间;
注: 关键还是要 先想清楚 思路模型, 然后再编写代码, 注意思考,不要一上来就写。


一、常规一般要有 两层循环:
      (1)第一层遍历 src str, 不匹配则直接 src 的 next, 直到 找到  *(dst + 0) 的匹配点;
      (2)记录该匹配点 tmp, 方便 第二层遍历 匹配成功的 时候 就把 该 指针返回;
      (3)第二层遍历 src  str 的 匹配点 tmp 开始, 单个字符,逐个比较 *src 与 *dst,

                若还没有到 dst str结束(即 ‘\0’ == *str) 就出现了 *src  != *dst,  则break 第二层循环, 

                并重新 置 下一次 二层 循环的  初始值;

                若二层 匹配 循环 完了, 则判断是不是 *dst 遍历 完了(if    '\0'  == *dst), 是就返回 匹配点tmp , match success。 

char *stupid_stsrstr(const char *srcstr, const char *dststr)
{
	char *src = srcstr, *dst = dststr, *tmp = NULL;
	
	while('\0' != src)
	{
		if (*src != *dst)    // 在src上找匹配点 
		{
			src ++;
			continue;
		}	
		
		tmp = src;          //找到匹配点,并记录,以备返回该点 
		while('\0' != *dst) //从src的匹配点,dst的第一个,逐字符比较
		{
			if (*src != *dst) //中间有不匹配则 在src上找第二个匹配点
				break;
				
				src++;
				dst++;
		}
		
		if ('\0' == *dst)   //判断是不是把 dst 遍历完了,
			return tmp; //是则match suc, 返回。   
		
		dst = dststr;       //还原到 dst 的第一个 字符,准备下一次第二层遍历
	}

	return NULL;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值