C语言第五十四弹---模拟使用strstr函数

news/2024/7/5 6:18:25

使用C语言模拟使用strstr函数

定义:strstr 是一个 C 标准库函数,用于在一个字符串中查找另一个字符串的第一次出现位置。strstr 函数的声明如下:


char* strstr(const char* haystack, const char* needle);

它接受两个参数:haystack 和 needle,分别表示要搜索的字符串和要查找的目标字符串。该函数返回一个指向目标字符串第一次出现位置的指针,如果未找到目标字符串,则返回 NULL。

思路:一般情况:str1 str2字符相同时,就进行循环比较,如果str2遍历完成,证明为子字符串,返回第一次出现的位置。特殊情况:如果str1出现多个相同字符,那么就需要改变str1字符位置,而str2不变。所以需要使用到2个临时指针变量来进行记录地址,防止丢失地址。

#include <stdio.h>
#inlcude <assert.h>

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* s1;
	const char* s2;//可能出现多个相同字符,所以需要使用多个临时指针变量
	const char* cp = str1;//接收str首地址,进行遍历
	if (*str2=='\0')//如果str2是一个空字符串 返回str1
	{
		return str1;
	}

	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 == *s2 && *s1 && *s2)//如果找到了相同的字符,那么就开始继续比较后面的字符
		{
			s1++;
			s2++;
		}

		if (*s2 == '\0')//如果*s2遍历完成,证明属于str1字符串的子字符串,则返回cp
		{
			return cp;
		}

		cp++;//如果没有找到,那么就改变s1位置,重新进行循环比较
	}
	return NULL;//循环截止,为空返回NULL
}

int main()
{
	char arr1[20] = "abbbcdef";
	char arr2[20] = "bbc";
	
	char* ret=my_strstr(arr1, arr2);

	if (ret == NULL)
	{
		printf("不存在\r\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	
	return 0;
}

http://lihuaxi.xjx100.cn/news/1903416.html

相关文章

Linux(一):如何在 Linux 中检查未挂载的磁盘

如何在 Linux 中检查未挂载的磁盘 1、概述2、 具体方法3、总结 1、概述 大家好&#xff0c;我是欧阳方超&#xff0c;可以关注我的公众号“欧阳方超”&#xff0c;后续内容将在公众号首发。 在Linux系统中&#xff0c; 挂载磁盘之前需要先检查是否有未挂载的磁盘&#xff0c;那…

Java,自带的排序方法

假如定义了一个学生类&#xff0c;想根据学生的总分对学生进行排序 案例&#xff08;进去是Student类的定义&#xff0c;用ctrlf 搜Collection&#xff0c;可以找到具体应用&#xff09; Collection.sort(要排序的集合&#xff0c;new 一个比较器(){ 大括号里是让重写比较器的…

【pycharm】Pycharm常用快捷键

批量替换是指一次性替换多个文件中的指定内容。在开发过程中&#xff0c;可能会遇到需要替换多个文件中的某个字符串或者某段代码的情况。如果一个一个文件进行替换&#xff0c;那么将会非常耗时和繁琐。 而使用批量替换功能&#xff0c;则可以一次性完成所有文件的替换操作&am…

Linux中的20个基本“ls”命令示例

LS command & how to use rmdir command I) ls commandII) rmdir can not remove folder with entities (stuffed with files or folders) I) ls command URL source : https://zhuanlan.zhihu.com/p/635083904 Linux中的20个基本“ls”命令示例 这里将介绍以下ls 命令参…

搭建HarmonyOS开发环境(OpenHarmony3.2)

搭建HarmonyOS开发环境 引言下载介绍搭建流程WindowsLinux 扩展 引言 目前HarmonyOS的热度愈演愈烈&#xff0c;本文将介绍如何搭建HarmonyOS嵌入式开发环境&#xff0c;帮助想要使用HarmonyOS进行嵌入式开发的人员进行入门。 其实博主以前已经介绍过如何搭建HarmonyOS开发环境…

vue element el-table 表格搜索 搜索表格内容关键字标红 关键字高亮显示

vue element el-table 表格搜索 搜索表格内容关键字标红 关键字高亮显示 最近公司项目需求&#xff0c;搜索表格的内容&#xff0c;并且需要搜索的关键字高亮显示&#xff08;关键字标红&#xff09;&#xff0c;如图所示最终效果&#xff1a; 1、在需要搜索的列用 v-html“sh…

Wireshark插件开发

第一章&#xff1a;Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧&#xff1a;过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章&#xff1a;网络协议分析 2.1 网络协议分析&#xff1a;TCP、UDP、ICMP等 2.2 高级协议分析&#xff1a;HTTP…

SLAM实践 -- 利用ROS实时运行ORB-SLAM2

利用ROS实时运行ORB-SLAM2 1.启动ROS: roscore2.打开摄像头&#xff08;笔者使用的相机是奥比中光的Astra S深度相机&#xff09;&#xff1a; roslaunch astra_camera astra.launch在/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src目录下找到ros_mono.cc&#xff0c;进行以下修改&…