关于strstr的用法以及模拟实现

43 篇文章 1 订阅
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
	char str1[] = "abcdefggggggg";
	char str2[] = "bcdef";
	char* p = NULL;
	p = strstr(str1, str2)
	puts(p);
	system("pause");
	return 0;
}

char* strstr (const char*, const char*);
strstr在第一个字符串中查找第二个字符串是否存在.找到后将首地址返回,没找到就返回NULL.
上面的代码在可以找到的情况下,是没有任何问题的,运行结果如下
在这里插入图片描述
但是,当无法在第一个字符串查找到第二个字符串的存在时,要返回NULL,所以当我们还用上面的代码去查找不存在的字符串时就会出现问题,比如

	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
	int main(){
		char str1[] = "abcdefggggggg";
		char str2[] = "acdef";
		char* p = NULL;
		p = strstr(str1, str2)
		puts(p);
		system("pause");
		return 0;
	}

运行结果如下:
在这里插入图片描述
所以我们对代码作出修改

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//strstr如果找到了,就返回找到的首地址
//如果没找到就返回空
int main(){
	char str1[] = "abcdefggggggg";
	char str2[] = "bcdef";
	char* p = NULL;
	if (p = strstr(str1, str2)){
		puts(p);
	}
	else {
		printf("没找到!\n");
	}
	system("pause");
	return 0;
}

对strstr的返回值进行判断,不为空则将首地址返回,为空就输出"没找到".

strstr的模拟实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
//模拟实现strstr
char* my_strstr(const char* str1, const char* str2){
	char* p = (char*)str1;
	char* s1 = (char*)str1;
	char* s2 = (char*)str2;
	assert(str1);
	if (str2 == NULL){
		return NULL;
	}
	while (*p){
		s1 = p;
		s2 = (char*)str2;
		while (*s1 && *s2 && *s1 == *s2){
			s1++;
			s2++;
		}
		if (*s2 == '\0'){
			return p;
		}
		p++;
	}
}
int main(){
	char str1[] = "abcdefggggggg";
	char str2[] = "bcdef";
	char* p = NULL;
	if (p = my_strstr(str1, str2)){
		puts(p);
	}
	else {
		printf("没找到!\n");
	}
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值