模拟实现C语言--strstr函数

模拟实现C语言–strstr函数

文章目录

  • 模拟实现C语言--strstr函数
  • 一、strstr函数是什么?
  • 二、使用示例
  • 三、模拟实现
    • 3.1 模拟实现1


一、strstr函数是什么?

在目标字符串中寻找字符串

char * strstr ( const char *str1, const char * str2);

根据语法结构,参数是指针,返回的类型也是指针
如果找到了,就会返回其所在的地址,如果没找到,就会返回NULL

二、使用示例

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>

int main()
{
	char arr1[] = "abbbbcdef";
	char arr2[] = "bbc";
	char* ret = strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("找不到\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

在这里插入图片描述

三、模拟实现

3.1 模拟实现1

在这里插入图片描述
如果直接让str1和str2相互比较,往后寻找的话,当str2不符合条件的时候,那么bbc就要继续从b开始和str1进行比较,但是str2的地址已经改变了,找不到b原来的地址了,所以就需要找两个指针来帮着往后移动
在这里插入图片描述

s1代替str1移动,s2代替str2移动,cp的作用是当第一次寻找失败的时候,第二次寻找开始的位置应该是第二个字符的位置,cp就是记录每一次寻找起始位置的指针,cp++就是下一轮寻找的起始位置
寻找最终的停止条件是字符串最后位置的’\0’,一旦出现,就说明其中或者全部的字符串已经寻找完毕了

char *  strstr (const char * str1, const char * str2)
{
        char *cp = (char *) str1;
        char *s1, *s2;
        if ( !*str2 )//如果str2上来就是空字符串的话,那就直接将str1返回
            return((char *)str1);
        while (*cp)//停止条件就是找到\0了,找到它就相当于找到末尾了
       {
                s1 = cp;
                s2 = (char *) str2;//强制类型转换的目的是为了一个字符一个字符的向后移动
                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;
                if (!*s2)
                        return(cp);
                cp++;
       }
        return(NULL);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/143075.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 反射设置List属性

使用 Java 反射可以动态地设置对象的属性值&#xff0c;包括 List 类型的属性。以下是一个示例代码&#xff0c;演示如何通过反射设置 List 类型的属性&#xff1a; 假设有一个类 Person&#xff0c;包含一个 List 类型的属性 names&#xff1a; java public class Person { …

升降机械比例多路阀放大器

升降机械比例多路阀放大器是一种在液压系统中控制多个执行元件的运动方向和速度的设备。这种放大器的特点是与负载无关&#xff0c;且为无极的。它通常配置外置比例放大器&#xff0c;用于控制一个或同时操作的多个液压耗能器的运动方向和速度。 被广泛应用于升降机械中的比例…

笔记本分屏怎么操作?3个方法提高工作效率!

“有朋友知道笔记本怎么才能实现分屏吗&#xff1f;我在工作时&#xff0c;经常需要来回切换屏幕&#xff0c;效率真的太低了&#xff0c;有什么方法可以实现两个屏幕同时使用吗&#xff1f;” 在现代生活中&#xff0c;多任务处理已成为常态&#xff0c;而笔记本分屏技术为用户…

数据结构-散列表

列表&#xff08;Hash Table&#xff09;&#xff0c;又称哈希表&#xff0c;是一种数据结构&#xff0c;特点是&#xff1a;数据元素的关键字与其存储地址直接相关 例&#xff1a;有一堆数据元素&#xff0c;关键字分别为&#xff5b;19&#xff0c;14&#xff0c;23&#xff…

雅虎、美客多、Temu、Allegro、亚马逊跨境平台选品技巧方法,测评养号攻略。

&#xff08;1) Best Sellers选品法 这个方法顾名思义&#xff0c;就是大家熟悉的热销榜单选品法。 不做过多解释&#xff0c;在自己熟悉的品类&#xff0c;隔几天就会观察一下前100名里有没有冒出什么新品。 它和现有的产品相同还是不同&#xff0c;自己做哪些搭配或者迭代…

【ERROR】ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND No package.json

1、报错 启动项目的时候&#xff0c;报这个错误&#xff0c;是因为根目录错误&#xff0c;查看&#xff0c;根目录是否错误。

设计大咖亲授:Figma中文环境设置全攻略!

作为UI设计师&#xff0c;你一定很熟悉Figma&#xff0c;Figma是一款专注于UI/UX设计的在线协作工具&#xff0c;使用非常高效方便&#xff0c;不需要下载和安装。它只需要通过浏览器编辑&#xff0c;在国外很受欢迎。但是Figma对于国内的小伙伴来说&#xff0c;使用Figma有一定…

CSRF跨站请求伪造

CSRF CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是通过诱导用户执行操作&#xff0c;利用用户在网站上的登录状态&#xff0c;以用户的身份在网站上执行恶意操作。 以下是CSRF攻击的一些关键特征&#xff1a; 用户身份&#xff1a;CSR…

实用篇-ES环境搭建

ES(elasticsearch) 是一个开源的分布式搜索引擎&#xff0c;可以用来实现搜索、日志统计、分析、系统监控等功能 elastic stack 是elasticsearch为核心的技术栈&#xff0c;包括beats、logstash(用作数据收集)、kibana(负责图形展示)、elasticsearch(负责数据搜索&#xff0c;…

Actipro Software WinForms Controls 23.1.2

Actipro它被认为是一组 UI 控件&#xff0c;用于为用户和开发人员创建漂亮的窗口窗体以及桌面应用程序。Actipro Software 创建于 1999 年&#xff0c;被认为是为用户和开发人员&#xff08;主要为 Microsoft 平台 .NET&#xff09;提供软件组件的私营提供商。基于克利夫兰&…

速看!人物百度百科怎么创建?5分钟教会你创建人物百度百科词条

百度人物百科是一个广受欢迎的在线百科平台&#xff0c;它为用户提供了一个便捷的方式来了解各种各样的人物信息。如果你有一个人物的详细资料&#xff0c;你可以通过创建一个百度人物百科页面来分享这些信息。 下面是分媒互动分享的创建百度人物百科页面的步骤以及需要注意的几…

CAD图纸加密软件丨加密操作详解

在工程设计领域&#xff0c;CAD&#xff08;计算机辅助设计&#xff09;软件广泛应用于绘图、建模和设计等方面。然而&#xff0c;随着计算机网络的普及&#xff0c;CAD图纸的安全问题也日益受到关注。如何保护CAD图纸免受未经授权的访问、复制和篡改&#xff0c;成为设计师和企…

YOLOv8-Seg改进:卷积变体系列篇 | PConv,减少冗余计算和内存访问可以更有效地提取空间特征 | CVPR2023 FasterNet

🚀🚀🚀本文改进:PConv,减少冗余计算和内存访问可以更有效地提取空间特征,引入到YOLOv8,与C2f结合实现二次创新; 🚀🚀🚀PConv 亲测在多个数据集能够实现涨点,同样适用于小目标分割 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习…

建模分析 | 差速轮式移动机器人运动学建模(附Python/Matlab仿真)

目录 0 专栏介绍1 差速模型定义2 控制量与驱动量3 运动学方程4 仿真实现4.1 Python仿真4.2 Matlab仿真 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索、采样法、智能算法等)&#xff…

性价比高的台灯推荐,呼声最高的五款护眼台灯推荐

台灯可以说家家必备&#xff01;家中有上学的小孩更是需要一款好台灯&#xff0c;因为看书、写字、做作业都离不开台灯&#xff0c;一款好的台灯不仅会提供明亮的学习环境&#xff0c;而且还能保护视力&#xff0c;预防近视&#xff0c;因此&#xff0c;挑选台灯绝对不可以马虎…

HelloWorld -从Houdini导出HDA到UE5

1.配置插件 在Houdini安装目录下找到对应版本引擎的插件&#xff0c;例如这里是Houdini19对应UE5.2的版本&#xff0c;我们就要保证先下载好UE5.2&#xff1a; 将Houdini插件粘贴到UE安装目录的Plugins文件夹下&#xff1a; 目前插件配置完成&#xff0c;打开UE会自动启用插…

基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境OpenCV环境 相关其它博客工程源代码下载其它资料下载 前言 本项目基于从网络获取的多种银行卡数据集&#xff0c;采用OpenCV库的函数进行图像处理&#xff0c;并通过神经网络进行模型训练。最终实…

基于springboot实现小学家校一体“作业帮”系统项目【项目源码】

基于springboot实现小学家校一体“作业帮”系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具…

放假通知!2024年全国中小学寒假时间发布!

进入冬季&#xff0c; 学生们都迫不及待地 期盼着寒假的到来。 近日&#xff0c;全国多地已经明确了 2024年中小学寒假的起止时间。 一起来看看你所在的城市寒假放几天 北京 据“首都教育”微信公众号消息&#xff0c; 普通中小学、中等职业学校 义务教育阶段2024年寒…

用CHAT如何写视频剪辑思路?

问CHAT&#xff1a;我的行业是国学教育&#xff0c;我的工作是视频剪辑师&#xff0c;给我推荐几个剪辑思路 CHAT回复&#xff1a; 作为一个国学教育视频剪辑师&#xff0c;你的主要任务是通过剪辑创作引人入胜、富有教育性的视频。 以下是一些可能对你有帮助的剪辑思路&…