【C语言】库函数strstr的模拟实现

目录

1、strstr函数的使用

1.1、函数的参数及返回类型

1.2、直接使用函数strstr

2、模拟实现strstr函数

2.1、暴力查找

2.2、KMP算法


 正文

1、strstr函数的使用

1.1、函数的参数及返回类型

1.2、直接使用函数strstr

strstr函数是用来进行字符串的查找。即在字符串str1中查找字符串str2,并返回在str1中第一次遇到str2时的地址。 打印该地址之后的字符串,直到遇到'\0'。

如下图演示: 

 

2、模拟实现strstr函数

2.1、暴力查找

说明:将两个字符串中的字符进行一一比较,找到要查找的字符串。

假设要字符串arr1中查找字符串arr2

begin是需要返回的地址,从begin开始向后找,是arr2在 arr1中第一次出现 

赋给指针begin的起始地址为 str1, 使得指针s1从begin开始移动,同时使得s2从str2开始移动,将s1指向的内容与s2指向的内容进行比较, 如果s1 不等于 s2, 则使begin++,s1从begin指向的位置开始向后移动,而s2返回起始位置(str2)开始移动,继续进行一一比较。如下图

对应代码进行解释为

 

完整代码为:

#define _CRT_SECURE_NO_WARNINGS 1
//strstr函数:在一个字符串中查找另一个字符串
#include <stdio.h>
char* my_strstr(const char* str1, const char* str2)
{						//str1、str2为两字符串的首字符地址
	char* begin = str1;//begin为s1进行移动的初始地址
	char* s1;
	char* s2;          //s1为str1中进行移动的指针;s2为str2中进行移动的指针
	if (*str2 == '\0')
		return str1;
	while (*begin)
	{
		s1 = begin;
		s2 = str2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return begin;
		}
		begin++;
	}
	return (NULL);
}
int main()
{
	char str1[] = "abbbcdew";
	char str2[] = "bbc";
	char* ret = my_strstr(str1, str2);
	if (ret == NULL)
		printf("没找到\n");
	else
		printf("%s\n", ret);
	return 0;
}

2.2、KMP算法

有这种算法,在一个字符串中找到另一个字符串,代码更高效。

但我目前还没学到,以后进行补充。 

 

 

  • 20
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: C语言函数实现源码可以在多个地方进行获取。 首先,你可以查看操作系统提供的标准C源码。比如,对于Linux系统来说,它使用的是GNU C Library (glibc),其源码可以在GNU官方网站或Linux发行版的仓中获得。 其次,你可以查看编译器的实现源码。大多数编译器会包含标准C实现源码。比如,GCC是一个开源编译器套件,包含大量常用函数实现源码。 另外,一些开源项目和网站也提供了常用函数实现源码。比如GitHub上有很多开源项目,如GNU Coreutils、BusyBox等,这些项目提供了很多常用函数实现源码。 最后,如果你想了解更底层的实现细节,你可以查看操作系统的源码。比如,Linux的内核源码提供了很多系统调用和函数的底层实现,这些可以帮助你深入理解函数的工作原理。 总的来说,C语言函数实现源码可以在操作系统的标准C源码、编译器源码、开源项目以及操作系统源码中进行获取。 ### 回答2: C语言函数实现源码可以在不同的地方找到。 首先,C语言的标准函数实现源码通常是由C编译器厂商提供的。大多数C编译器都附带了标准的源码,可以在编译器的安装目录下找到。例如,对于GNU GCC编译器,可以在其安装目录下的"lib"文件夹中找到相关的源码文件。 其次,C语言的开源实现,如GNU C(glibc)以及其它一些开源,也提供了标准函数实现源码。这些开源的源码通常可以在它们的官方网站或代码托管平台上找到,如Github等。 另外,还可以通过在互联网上搜索特定函数实现源码来找到相关的资源。有许多社区和论坛上都有人分享了自己实现函数代码。 需要注意的是,虽然C语言标准函数实现源码可以找到,但这并不意味着我们可以直接修改它们。标准函数的源码通常是经过优化和经过验证的,适用于各种平台和环境。如果有需要对标准的行为进行扩展或修改,应当采用编写自定义函数的方式来实现。 ### 回答3: C语言函数实现源码可以在多个地方找到。 首先,可以查看C语言的标准函数实现源码。C标准函数实现源码通常是由编译器或操作系统提供的。例如,GNU C 编译器中的源码集合在GNU C (又称为glibc)中,可以在GNU官方网站或其他开源源码托管平台(如Github)上找到。此外,还有其他的一些标准C实现,如uclibc、newlib等。 其次,很多C语言函数实现源码也可以在开源软件项目或中找到。许多常用的C,如数据访问MySQL、图形OpenGL、网络编程libcurl等,都是开源的,并且提供了源码。你可以在它们的官方网站或开源源码托管平台上找到它们的源码。 最后,一些编程书籍或教程也会提供一些函数实现源码作为示例。这些源码通常会通过书籍附带的光盘或相关网站提供。 总之,C语言函数实现源码可以通过搜索相关的开源项目、编程书籍或教程来找到。通过查看这些源码可以更深入地了解函数实现原理,同时也可以借鉴和学习他人的代码实现方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值