C语言进阶版第13课—字符函数和字符串函数2

文章目录

  • 1. strstr函数的使用和模拟实现
    • 1.1 strstr函数的使用
    • 1.2 模拟实现strstr函数
    • 1.3 strstr函数和strncpy函数、puts函数的混合使用
  • 2. strtok函数的使用
  • **3. strerror函数的使用**

1. strstr函数的使用和模拟实现

1.1 strstr函数的使用

  • strstr函数是用来通过一个字符串来查找另一个字符串的,它的原形如下:
  • char* strstr ( const char* str1, const char* str2 )
  • str1和str2分别是两个字符串的地址,strstr函数是在str1的字符串中查找str2所指的字符串
  • strstr — string string —它返回的是字符串str2在字符串str1中第一次出现的位置

在这里插入图片描述


1.2 模拟实现strstr函数

  • 首先我们先创建一个函数my_strstr,用来实现strstr函数的作用
  • 接下来我们进行分析
    在这里插入图片描述

//模拟实现strstr函数
#include <stdio.h>
#include <assert.h>
const char* my_strstr(const char* str1, const char* str2)
{assert(str1 && str2);//定义两个指针来进行匹配const char* s1 = str1;const char* s2 = str2;//cur指针用来标记可能进行匹配的位置const char* cur = str1;//若cur未指向'\0'while (*cur){//进行一次匹配s1 = cur;s2 = str2;while(*s1 == *s2){s1++;s2++;}if (*s2 == '\0')return cur;//cur每次匹配完后++cur++;}return NULL;
}
int main()
{char arr1[] = "abbbbcdefabcdef";char arr2[] = "bbc";const char* ret = my_strstr(arr1, arr2);if (ret == NULL)printf("no\n");elseprintf("%s\n",ret);return 0;
}

1.3 strstr函数和strncpy函数、puts函数的混合使用

//strstr函数和strncpy函数、puts函数
#include <stdio.h>
#include <string.h>int main()
{char str[] = "This is a simple string";char* pch;pch = strstr(str, "simple");if (pch != NULL)strncpy(pch, "abcdef", 6);puts(str);return 0;
}

在这里插入图片描述


2. strtok函数的使用

  • strtok函数的原形是
  • char* strtok ( char* str, const char* sep );
  • sep指向一个字符串,该字符串实际上是一堆用作分隔符的集合
  • 第一个参数str指向一个字符串,它其中包含0个或多个由sep字符串中的一个或多个分隔符分隔的标记
  • strtok函数找到str中的下一个标记,并用’\0’结尾,返回一个指向这个标记的指针
  • strtok函数会改变会被操作的字符串,因此一般是先拷贝一份字符串给strtok使用
  • 当strtok函数的第一个参数不为NULL时,函数找到str中的第一个标记,并且strstr会保存它在字符串中的位置
  • 当strtok函数的第一个参数是NULL时,函数将从保存的位置开始,查找下一个标记
  • 如果字符串中不存在更多的标记,则返回NULL

  通俗点讲,就是strtok有两个参数,第一个参数指向的是字符串,不过这个字符串中有英文字母和分隔符的组合,另一个参数也是指向字符串,不过第二个参数的字符串中全部是分隔符,该分隔符是用来查找第一个参数字符串中出现分隔符的

  • char* arr1[ ] = “1567899239@qq.com”
  • char* arr2[ ] = “@.”
  • char* str = arr1;
  • char* sep = arr2;
  • 就像上面代码,sep字符串的分隔符是用来查找str字符串中出现该分隔符的位置,并将str中该分隔符改为’\0’,并且返回指向该字符串的指针
  • 就像上面代码,他会先找到第一个出现分隔符’@‘的位置,然后将它改为’\0’,最后返回指向“1567899239”的地址(即“1”的地址),最后因为第一个参数不为NULL,strtok函数会保存此时被修改的’\0’位置,若下次第一个参数是NULL,它将会从该处开始查找下一个分隔符,即从" qq "处开始查
  • sep字符串中的分隔符不分先后

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


  • 注意
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述


3. strerror函数的使用

在这里插入图片描述


在这里插入图片描述


  • 而相对于strerror函数,perror函数操作起来更为简单
  • perror函数会直接将错误信息打印出来
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Linux进程-2

一&#xff1a;进程优先级 基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用&#xff0c;可以改善系统性能。 还可以把进程运行到指定的CPU上&#…

Mysql数据库相关操作总结

目录 1.背景知识 2.创建数据库 2.1创建指令 2.2字符集 3.查看数据库 3.选中数据库 4.删除数据库 5.数据表的操作 5.1基本数据类型 5.2创建表 5.3查看所有的表 5.4查看表的结构 5.5删除表 6.CRUD增删查改 6.1新增和效果查看 6.3删除 6.4查找 1.背景知识 数据库就…

哈希知识点总结:哈希、哈希表、位图、布隆过滤器

目录 哈希 哈希表 哈希常用方法 1、直接定址法 2、存留余数法 哈希冲突 哈希冲突的解决办法 1、闭散列&#xff1a;开放定址法 &#xff08;1&#xff09;线性探测法 &#xff08;2&#xff09;二次探测法 2、开散列 哈希桶 / 拉链法 哈希的运用 位图 set操作 …

3-3 AUTOSAR RTE 对SR Port的作用

返回总目录->返回总目录<- 一、前言 RTE作为SWC和BSW之间的通信机构,支持Sender-Receiver方式实现ECU内及ECU间的通信。 对于Sender-Receiver Port支持三种模式: 显式访问:若运行实体采用显示模式的S/R通信方式,数据读写是即时的;隐式访问:当多个运行实体需要读取…

Docker安装与应用

前言 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻 量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互 之间…

关于Fake Location定位,运动世界校园问题

不好意思&#xff0c;之前那个文章其实是很早之前的&#xff0c;不知道为什么审核了很久一直没有通过&#xff0c;然后前几周莫名其妙点了一下重新发布&#xff0c;竟然发布成功了&#xff0c;这个方法已经失效了&#xff0c;要可以稳定&#xff0c;我建议是买一台root的手机&a…

鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务

使用场景 Sensor Service Kit&#xff08;传感器服务&#xff09;使应用程序能够从传感器获取原始数据&#xff0c;并提供振感控制能力。 Sensor&#xff08;传感器&#xff09;模块是应用访问底层硬件传感器的一种设备抽象概念。开发者可根据传感器提供的相关接口订阅传感器…

Docker容器的使用

前提条件 Linux环境安装好Docker&#xff0c;可参考Rocky Linux9下安装Docker和卸载Docker Docker命令图 帮助命令 帮助命令&#xff0c;查看有哪些命令可以用 [rootlocalhost ~]# docker --help ​ 查看某个命令的帮助&#xff0c;例如&#xff1a;run [rootlocalhost ~]# …

深入探索机器学习中的目标分类算法

在当今数据驱动的世界中&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff09;正逐渐成为解决问题的重要工具。在众多机器学习任务中&#xff0c;目标分类&#xff08;Classification&#xff09;算法尤其受到关注。本文将深入探讨目标分类算法的基本概念、常见类…

【刷点笔试面试题试试水】 i++与++i哪个效率更高?

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: 都应该知道,i是先增加再参与计算. i是先计算再增加. 原理是i,是直接返…

免费的录屏软件有哪些?可以试试这4款。

录屏软件已经被用于很多的领域和场景当中&#xff0c;能够帮助我们进行在线教学&#xff0c;线上培训&#xff0c;游戏直播与分享&#xff0c;视频记录等等。并且很多的录屏软件都有免费的功能&#xff0c;它们让大家的录屏变得更加的方便。如果大家需要录屏工具的话&#xff0…

认知杂谈92《菜鸟的自我修炼:守住存款,识别诱惑》

内容摘要&#xff1a; “快速致富"的口号在网络和广告中无处不在&#xff0c;它们吸引着渴望改变生活的人。然而&#xff0c;这些诱惑常常是精心设计的骗局&#xff0c;利用人的贪婪本性。成功学导师们宣扬的"成功秘诀"和"快速通道”&#xff0c;让人陷入不…

【MATLAB代码】三维空间上的RSS(信号强度)定位,n个锚点自适应(锚点数>3即可)(源代码下载链接)

文章目录 代码概况源代码运行结果RSS定位原理讲解1.基本概念2.信号强度与距离关系3. 定位原理 其他情况 代码概况 基于MATLAB的定位程序&#xff0c;使用RSS&#xff08;接收信号强度&#xff09;来估计距离&#xff0c;再由距离计算位置&#xff0c;用于三维空间上的定位。调…

一行代码,AI大模型训练成本再降30%,混合精度训练再升级

FP8通过其独特的数值表示方式&#xff0c;能够在保持一定精度的同时&#xff0c;在大模型训练中提高训练速度、节省内存占用&#xff0c;最终降低训练成本。 AI大模型开发系统Colossal-AI的混合精度训练再度升级&#xff0c;支持主流的BF16(O2) FP8(O1)的新一代混合精度训练方…

基于php的民宿预订管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

SpringCloud入门(九)Feign实战应用和性能优化

一、Feign实战应用 Feign的客户端与服务提供者的controller代码非常相似&#xff1a; 有没有一种办法简化这种重复的代码编写呢&#xff1f; 方式一&#xff1a;继承 优点&#xff1a; 简单。实现了代码共享。 缺点&#xff1a;服务提供方、服务消费方紧耦合。参数列表中的注解…

25维谛技术面试最常见问题面试经验分享总结(包含一二三面题目+答案)

开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费&#xff01;全文干货。 【免费】25维谛技术面试最常见问题面试经验分享总结&#xff08;包含一二三面题目答案&#xff09;资源-CSDN文库https://download.csdn.net/download/m0_72216164/8979…

TDSQL-C电商可视化,重塑电商决策新纪元

前言&#xff1a; 在数字化浪潮席卷全球的今天&#xff0c;电子商务行业以其独特的魅力和无限潜力&#xff0c;成为了推动全球经济增长的重要引擎。然而&#xff0c;随着业务规模的急剧扩张&#xff0c;海量数据的涌现给电商企业带来了前所未有的挑战与机遇。如何高效地处理、…

02-ZYNQ linux开发环境安装,基于Petalinux2022.2和Vitis2022.2

petalinux安装 Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件&#xff0c;包括了 u-boot、Linux Kernel、device-tree、rootfs 等源码和库&#xff0c;以及 Yocto recipes&#xff0c;可以让客户很方便的生成、配置、编译及自定义 Linux 系统。Petalinux 支持 Ver…

秦巴山区SHP格式矢量范围

‌秦巴山区的shp范围包括河南、湖北、重庆、四川、陕西、甘肃六省市的80个县(市、区)。‌这一区域不仅地理范围广泛&#xff0c;而且生态多样性丰富&#xff0c;是国家重要的生物多样性和水源涵养生态功能区。秦巴山区的地貌类型以山地丘陵为主&#xff0c;间有汉中、安康、商丹…