模拟实现strstr函数

#include<stdio.h>
#include<windows.h>
char *my_strstr(const char *str, const char *str1)
{
	char *p = NULL;
	char *q = NULL;
	char *np = NULL;
	p = str;
	
	while (*p)
	{
		np = p;
		q = str1;
		for (; *np && *q && (*np == *q); np++, q++){
		}
			if (*q =='\0'){
				return p;
			}
			if (*np == '\0'){
				break;
			}
			p++;
	}
	return NULL;
	
	
}
int main()
{
	const char str[32] = "abcdef";
	char str1[32] = "cde";
	char *arr = my_strstr(str, str1);
	printf("%s\n", arr);
	system("pause");
	return 0;
}

函数算法思想:
                      这个函数一共定义三个指针,p,q,np,p指向str首元素,q指向str1首元素,让np=p,即np也指向str首元素

                      创建一个while循环语句,把条件  p=str,写在while循环外面,p只初始化一次
                     在while循环里,循环退出的条件为 *p=0;也就是将str里的元素循环完后自动退出
                     在while内加一个for循环,初始条件为,q=str,np=p;且每次退出for循环时初始条件都要重新初始化,
                      for循环判断条件,&&*np&&*q&&*np==*q;判断str1是否为str的字串
                     if(q=='\0')  return p;说明str1被找到了,直接返回子串

                     if(np==‘\0’)return null;  说明子串没有找到,返回null
                    这两种情况之外就是q!='\0';np!='\0';说明没有找完,p++,继续从下一个str里的元素开始找。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值