当前位置: 首页 > news >正文

strstr函数的使用和模拟实现

e91e3d0e04484e36b4917cc1472cc987.png

目录

 1.头文件

2.strstr函数的使用

3.strstr函数模拟实现


小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 



 1.头文件

strstr函数的使用需要头文件

#include<string.h>

2.strstr函数的使用

304ff679a8e243e4b9ddf9e5308e26eb.png  

简述:strstr函数接收两个字符型地址,用于接收两个字符串,strstr会返回 第二个字符串中第一个字符串第一次出现的地址

注意:返回值是const char*类型

示例如下:

27437abfa3734f53959226b327eeb68a.png

我们看到,strstr函数会在前一个字符串中找后一个字符串,并返回后一个字符串在前一个字符串第一次出现的地址

需要注意:strstr函数在判断字符串是否相等时不包括 '\0',以 '\0' 为停止比较的标志


如果arr2只有'\0',那就会直接返回arr1首元素的地址

d0744485927b487caa85285e0b26cfdc.png


3.strstr函数模拟实现

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
char* my_strstr(char* arr1, char* arr2) {char* larr1 = arr1;char* larr2 = arr2;if (*arr2 == '\0') {return arr1;//如果arr2是空数组,直接返回arr1的首地址}/*思路:* 如果*arr1!=*arr2,arr1与arr2都是首元素地址,不相等那说明起始位置二者之间不存在相同元素,返回地址一定不在这里* 直接arr1加1,从下一个地址开始比较* * 寻找字符串结束时期:寻找结束一定是arr2到 '\0' 了,说明字符串全部找到* */while (* arr2) {//arr2没到'\0',寻找没结束if (*arr1 != *arr2) {arr1++;//二者不相等,都加1从下一个位置开始找}larr1 = arr1;//larr1需要赶上arr1的地址,从arr1的地址开始找,arr2不需要变化,arr2始终指向起始位置即可if (*arr2 == *arr1) {//二者相等while (*larr1 == *larr2) {//用临时变量判断相等,不改变变量值larr1++;larr2++;//相等两者相加if (*larr2 == '\0') {//先判断这部,如果larr2是'\0',说明larr2'\0'前一个已经相等,所以larr2已经找到了,直接返回arr1的地址即可//判断结束,arr2到'\0'了,返回arr1的地址return arr1;}if (*larr1 != *larr2) {//判断过程中突然出现不相等arr1++;//arr1加1,从下个位置再次开始找larr1 = arr1;//larr1追赶上arr1位置larr2 = arr2;//larr2重赋值}}}}
}int main()
{	char arr1[] = { "xxabxxababcxxxx" };char arr2[] = { "abc" };char arr3[] = { "xxbcde" };char*p = my_strstr(arr1, arr2);printf("%p\n", p);const char* pp = strstr(arr1, arr2);printf("%p\n", pp);}

代码冗长复杂,可以画图分析,如有错误可以指出

8fdd48caf53e46a897fd8a5554dbb454.png

相关文章:

strstr函数的使用和模拟实现

目录 1.头文件 2.strstr函数的使用 3.strstr函数模拟实现 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff01;没这个必要&#xff0c;方源面色淡然一把抓住&#xff01;顷刻炼化&#xff01; 1.头文件 strstr函数的使用需要头文件 #include<string.h>…...

使用Selenium与WebDriver实现跨浏览器自动化数据抓取

背景/引言 在数据驱动的时代&#xff0c;网络爬虫成为了收集和分析海量数据的关键工具。为了应对不同浏览器环境下的兼容性问题&#xff0c;Selenium与WebDriver成为了开发者实现跨浏览器自动化数据抓取的首选工具。本文将深入探讨如何利用Selenium和WebDriver实现跨浏览器的数…...

信创实践(3):基于x2openEuler将CentOS升级成openEuler,享受其带来的创新和安全特性

引言&#xff1a; 在当前的 IT 行业中&#xff0c;创新和安全性是两大关键趋势。随着 CentOS 停止维护&#xff0c;许多用户正在寻找替代方案&#xff0c;以保持其系统的更新和安全。openEuler 作为一个强大的开源操作系统&#xff0c;成为了理想的迁移目标。本教程将指导您如…...

LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 相等类型(Equality Type)

《何谓相等 (Equality)&#xff0c;在类型理论(Type Theory)语境下》 与 《转化&#xff08;conversion and reduction&#xff09;后的相等&#xff08;Equality&#xff09;》&#xff0c;两文中&#xff0c;已对相等&#xff08;Equality&#xff09;的概念进行了描述&#…...

Idea 创建 Maven项目的时候卡死

文章目录 一、Archetype 和 Catalog1.1 Archetype&#xff08;原型&#xff09;1.2 Catalog&#xff08;目录&#xff09; 二、可能遇到的问题2.1 问题描述2.2 原因分析2.3 解决方案 参考资料 一、Archetype 和 Catalog 1.1 Archetype&#xff08;原型&#xff09; Archetype…...

C++入门(02)简单了解C++应用程序的开发部署

文章目录 1. 开发C应用程序2. 简单示例计算器程序3. 需求分析4. 设计5. 编码6. 编译7. 调试8. 测试9. 部署10. 部署示例10.1 使用Visual Studio Installer Projects创建安装程序10.2 安装VisualStudio Installer Projects扩展10.3 在calculator解决方案中创建安装项目10.3.1 添…...

有了室内外一体化人行导航,你还怕迷路吗?

在快节奏的现代生活中&#xff0c;无论是穿梭于繁华的都市丛林&#xff0c;还是漫步于错综复杂的购物中心&#xff0c;迷路似乎成了不少人的“小确丧”。然而&#xff0c;随着科技的飞速发展&#xff0c;一项革命性的创新——室内外一体化人行导航系统&#xff0c;正悄然改变着…...

Python虚拟环境包迁移

1. 激活源虚拟环境 首先&#xff0c;激活你想要导出包的源虚拟环境。在命令行中输入&#xff1a; Windows: path\to\your\source_env\Scripts\activatemacOS/Linux: source path/to/your/source_env/bin/activate 2. 导出已安装包的列表 使用以下命令生成一个requirements…...

利用分布式锁在ASP.NET Core中实现防抖

前言 在 Web 应用开发过程中&#xff0c;防抖&#xff08;Debounce&#xff09; 是确保同一操作在短时间内不会被重复触发的一种有效手段。常见的场景包括防止用户在短时间内重复提交表单&#xff0c;或者避免多次点击按钮导致后台服务执行多次相同的操作。无论在单机环境中&a…...

Django+Vue3前后端分离学习(二)(重写User类)

一、重写User类&#xff1a; 1、首先导入User类&#xff1a; from django.contrib.auth.models import User 2、然后点在User上&#xff0c;按住ctrl 点进去&#xff0c;发现 User类继承AbstractUser Ctrl点进去AbstractUser&#xff0c;然后将此方法全部复制到自己APP的mo…...

兔英语语法体系——观后笔记

目录 一、视频链接 二、视频前言 三、简单句(Simple Sentences) 1. 可独立完成的动作 2. 有1个动作的承受者 3. 有两个动作承受者 4. 只有一个动作承受者(但需补充) 5. 非 “动作” 6. 总结 四、五大基本句型 五、句子成分 6. 定语 7. 状语 8. 同位语 9. 总结 …...

哈希表如何避免冲突

系列文章&#xff1a; 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 3. 哈希表如何避免冲突 目录 1.概念 2. 冲突-概念 3. 冲突-避免 3.1 冲突-避免-哈希函数设计 3.2 冲突-避免-负载因子调节 4. 冲突-解决 4.1 冲突-解决-闭散列 4.1.1 线性探…...

内核模块驱动开发

内核模块开始学习前&#xff0c;一定是最先接触到内核模块三要素(面试)&#xff0c;驱动入口、驱动出口和协议的遵循。 1.内核模块三要素(面试)//修饰模块化驱动的入口函数module_init(demo_init);//修饰模块化驱动的出口函数module_eixt(demo_exit);//遵循GPL开源协议MODULE_…...

Linux 下 alsa 库录音并保存为 WAV 格式

麦克风列表&#xff1a; [jnjn build]$ arecord -l **** List of CAPTURE Hardware Devices **** card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]Subdevices: 1/1Subdevice #0: subdevice #0 card 1: Camera [2K USB Camera], device 0: USB Aud…...

使用stripe进行在线支付、退款、订阅、取消订阅功能(uniapp+h5)

stripe官网:Stripe 登录 | 登录 Stripe 管理平台 然后在首页当中打开测试模式,使用测试的公钥跟私钥进行开发 测试卡号 4242 4242 4242 4242 1234 567 在线支付 stripe的在线支付有两种,第一种就是无代码,第二中就是使用api进行自定义,一般来说推荐第二种进行开发 无…...

深度学习中常见的损失函数

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间 深度学习中常见的损失函数 损失函数的作用 损失函数是衡量神经网络输出与真实标签之间差距的指标。在训练过程中&#xff0c;神经网络的目标是最小化损失函数的值。常见的损失函数包括均方误差&#xff08;MS…...

认识Linux及Linux的环境搭建

目录 1、什么是Linux2、Linux环境搭建2.1 下载安装 Xshell2.2 下载安装 VMware Workstation Pro2.3 选择适合自己系统 1、什么是Linux Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#xff0c;故得此称呼&#xff…...

Java之线程篇三

​​​​​​​ 目录 线程状态 观察线程的所有状态 线程状态及其描述 线程状态转换 代码示例1 代码示例2 线程安全 概念 线程不安全的代码示例 线程不安全的原因 线程安全的代码示例-加锁 synchronized关键字 synchronized的特性 小结 形成死锁的四个必要条件 …...

Bootstrap动态设置表格title项

页面searchType <form id"formId"><div class"select-list"><ul><li><select name"searchType" id"searchType"><option value"1">按各节点统计</option><option value"…...

Arrays.sort()方法在Java中的使用:理论与实践

目录 一.概述 二.实现方式 三.具体介绍 1.基本数据类型数组 2.对象数组 1)使对象实现Comparable接口 2)为对象再专门实现一个比较器类 四.进阶技巧 1.基础类型数组实现自定义比较 2.如何进行逆序排序 3.lambda表达式实现比较器类 4.List的排序方法Collection.sort()…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...