当前位置: 首页 > 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

http://www.lryc.cn/news/433526.html

相关文章:

  • 使用Selenium与WebDriver实现跨浏览器自动化数据抓取
  • 信创实践(3):基于x2openEuler将CentOS升级成openEuler,享受其带来的创新和安全特性
  • LEAN 类型理论之注解(Annotations of LEAN Type Theory)-- 相等类型(Equality Type)
  • Idea 创建 Maven项目的时候卡死
  • C++入门(02)简单了解C++应用程序的开发部署
  • 有了室内外一体化人行导航,你还怕迷路吗?
  • Python虚拟环境包迁移
  • 利用分布式锁在ASP.NET Core中实现防抖
  • Django+Vue3前后端分离学习(二)(重写User类)
  • 兔英语语法体系——观后笔记
  • 哈希表如何避免冲突
  • 内核模块驱动开发
  • Linux 下 alsa 库录音并保存为 WAV 格式
  • 使用stripe进行在线支付、退款、订阅、取消订阅功能(uniapp+h5)
  • 深度学习中常见的损失函数
  • 认识Linux及Linux的环境搭建
  • Java之线程篇三
  • Bootstrap动态设置表格title项
  • Arrays.sort()方法在Java中的使用:理论与实践
  • 用AI写论文,千万不要这样用ChatGPT生成参考文献References!!
  • Debian 12如何关闭防火墙
  • windows C++-并行编程-PPL任务并行(二)
  • 快速了解 servlet(SpringMVC 的底层)
  • QT中tr的作用是什么
  • OpenCV结构分析与形状描述符(7)计算轮廓的面积的函数contourArea()的使用
  • 内网环境使用Docker部署Qwen2模型-vLLM篇
  • Rust的常数、作用域与所有权
  • Spring 源码解读:解决循环依赖的三种方式
  • Web3 详解
  • Spring 中依赖注入注解的区别详解