字符串常用函数介绍及模拟实现

news2024/11/20 0:42:59

🐎作者的话
本文介绍字符串常用的函数如何使用及其模拟实现~


跳跃式目录

    • strlen介绍
    • strcpy介绍
    • strcat介绍
    • strcmp介绍
    • strncpy介绍
    • strncat介绍
    • strncmp介绍
    • strstr介绍
    • strchr介绍
    • strrchr介绍
    • memcpy介绍
    • memmove介绍
    • memcmp介绍
    • memset介绍
    • strtok介绍


strlen介绍

函数原型:strlen(const char* str)
返回值:size_t
用法:将从str开始到’\0’结束这段空间内字符的个数返回,不包含’\0’。

  • 返回值是size_ t类型,因此不会出现负数,用于长度比较时需注意.
  • strlen模拟实现
    法一:循环
    在这里插入图片描述
    法二:递归
    在这里插入图片描述

法三:指针-指针
在这里插入图片描述
效果图:
在这里插入图片描述


strcpy介绍

函数原型:strcpy(char* target,const char* source)
返回值:char*
用法:将从source开始,到’\0’结束的字符串,拷贝到target里面(包括’\0’)。

  • target空间必须足够大
  • target不能是常量字符串(即可以修改)
  • strcpy模拟实现
    在这里插入图片描述

效果图:
在这里插入图片描述


strcat介绍

函数原型:strcat(char* target,const char* source)
返回值:char*
用法:将从source开始到’\0’结束的字符串接到target的’\0’后面(该’\0’也被替换)

  • 目标函数需要有足够的空间
  • 目标空间不能是常量字符串(即可以修改)
  • 两个字符串必须有’\0’
  • strcat模拟实现
    一:普通实现
    在这里插入图片描述
    效果图:
    在这里插入图片描述
    二:创新实现,自己拼接自己
    在这里插入图片描述

strcmp介绍

函数原型:strcmp(const char* str1,const char* str2)
返回值:int
用法:按照ASCII码依次比较,1>2则返回正数,1<2则返回负数,相等返回0.

  • 在VS中正数返回1,负数返回-1
  • 但不是所有编译器都是这样
  • 判断时最好不用1或-1
  • strcmp模拟实现
    此处即可用双方都不是’\0’判断,也可以用双方是否相等判断
    在这里插入图片描述

strncpy介绍

函数原型:strncpy(char* target,const char* source,unsigned int n)
返回值:char*
用法:将source起n个字符拷贝到target中。

  • 若n大于source的长度,多出来的默认拷贝’\0(会改变字符串结束位置)
  • strncpy模拟实现
    在这里插入图片描述
    效果图:在这里插入图片描述

strncat介绍

函数原型:strncat(char* target,const char* source,unsigned n)
返回值:char*
用法:把source起的n个字符接到target后面,第一个’\0’被替换,会在最后再补一个’\0’。

  • 若n大于source的长度,则多出来的默认接入’\0’.
  • strncat模拟实现
    在这里插入图片描述
    效果图:
    在这里插入图片描述

strncmp介绍

函数原型:strncmp(const char* str1,const char* str2,unsigend n)
返回值:int
用法:对str1和str2的前n个进行比较,不足默认为’\0’

  • strncmp模拟实现
    在这里插入图片描述
    效果图:
    在这里插入图片描述

strstr介绍

函数原型:strstr(const char* arr1, const char* arr2)
返回值:char*
用法:在arr1里面寻找第一个出现的arr2,返回第一次出现的首元素地址

  • 若arr2大于arr1,返回null
  • 若arr2的长度和arr1相等,用strcmp判断
  • strstr模拟实现
    在这里插入图片描述
    在这里插入图片描述
    先排除特殊情况,随后判断

strchr介绍

函数原型:strchr(const char* str,char c)
返回值:char*
用法:找到str中第一次出现c的位置,返回地址。

  • strchr模拟实现
    在这里插入图片描述

strrchr介绍

函数原型:strrchr(const char* str,char c)
返回值:char*
用法:返回str中最后一次出现c的位置。

  • strrchr模拟实现
    在这里插入图片描述

memcpy介绍

函数原型:memcpy(void* target,const void* source,unsigned n)
返回值:void*
用法:内存拷贝

  • 拷贝n个字节,不论什么类型,低位开始访问
  • 若自己拷贝自己,请用memmove
  • memcpy模拟实现
    在这里插入图片描述

memmove介绍

函数原型:memcpy(void* target,const void* source,unsigned n)
返回值:void*
用法:memcpy的自身拷贝自身用法

  • memmove是momcpy的上位替代,可以避免自身拷贝时的重叠现象
  • 如果程序需要重叠呢?
  • VS现在标准库里memcpy和memmove已经一样了.
  • mommove模拟实现
    在这里插入图片描述

memcmp介绍

函数原型:my_memcmp(const void* data1, const void* data2,unsigned n)
返回值:int
用法:和str相同,从前往后按字典序比较

  • memcmp模拟实现
    在这里插入图片描述

memset介绍

函数原型:memset(void* arr,int n,unsigned t)
返回值:void*
将arr的前t个字节设置为n

  • memset模拟实现
    在这里插入图片描述

strtok介绍

函数原型:strtok(const char* str1,const char* str2)
返回值:char*
用法:检索arr1中每个出现的arr2中的字符,并将他们分成多个字符串.

  • 过于简单 在此不再展示代码~

📖博客主页:咚咚小圆帽的CSDN主页
🎁感谢您的:👍点赞⭐️收藏❤️关注🔗转发~
📚所属专栏:C语言进阶
📑相关文章:
🔖今日寄语: 加油~
⚠️本文由咚咚小圆帽于2023年1月14日在CSDN原创首发
🌏欢迎各位指出错误,非常感谢~

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

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

相关文章

GO语言配置和基础语法应用(二)

Go 语言结构 在我们开始学习 Go 编程语言的基础构建模块前&#xff0c;让我们先来了解 Go 语言最简单程序的结构。 Go Hello World 实例 Go 语言的基础组成有以下几个部分&#xff1a; 包声明引入包函数变量语句 & 表达式注释 接下来让我们来看下简单的代码 package ma…

Allegro如何导出placement操作指导

Allegro如何导出placement操作指导 在做PCB布局的时候,有时需要导出和导入Placement,placement文件是板上所有器件的坐标以及所在层面的文件 具体操作如下 导出placement文件,选择File

实现用户进程

文章目录前言前置知识实验操作实验一实验二前言 博客记录《操作系统真象还原》第十一章实验的操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a; 定义并初始化 TSS。实现用户进程。 前置知识 TSS 简介 TSS&#xff0c;即 Tas…

time和datetime之类的东西

这篇文章是学习数据可视化的记录&#xff0c;原视频链接 B站视频连接 time 先来看一张图 struct_time(时间元组)是作为时间戳和格式化后的字符串的桥梁的 mktime(t)是将指定时间元组转换为时间戳的 localtime()是将指定时间戳转换为时间元组的&#xff0c;可以不写时间戳&…

【一文教你学会动态内存管理】

1.为什么会存在动态内存分配&#xff1f; 2. 动态内存函数的介绍 2.1 malloc函数和free函数 2.2 calloc函数 2.3 realloc 3. 常见的动态内存错误 3.1 对NULL指针的解引用操作 3.2 对动态开辟空间的越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态开…

Uniswap v3 详解(一):设计原理

刚看完 Uniswap v2 的代码&#xff0c;本来打算写一个 Uniswap v2 设计与实现&#xff0c;结果 Uniswap v3 就发布了。趁着这个机会就先写一个 Uniswap v3 设计与实现吧。 因为 v3 版本的实现复杂度和 v2 已经不在一个量级了&#xff0c;难免会有理解上的偏差&#xff0c;本文…

ESP8266-01s+STM32+MQTT+ONNET+EMQX实现定时发送心跳包并配置MQTT断开连接后进行重连

目录:1.情况介绍2.发送心跳包和MQTT重连实现步骤3.运行效果1.情况介绍 硬件通过ESP8266-01s连接自己的MQTT服务器EMQX的时候&#xff0c;发现连上后没过多久就自动断开了&#xff0c;由于硬件代码使用的是ONNET的案例代码改的&#xff0c;所以发现该案例代码并没有发送心跳包和…

测试篇(一):需求、BUG、测试用例、开发模型和测试模型、配置管理和软件测试

目录一、什么是需求1.1 需求的概念1.2 用户需求1.3 软件需求二、什么是测试用例2.1 测试用例的概念三、什么是BUG3.1 BUG(软件错误)的概念四、开发模型4.1 软件生命周期4.2 瀑布模型4.3 螺旋模型4.4 增量、迭代模型4.5 敏捷模型五、测试模型5.1 软件测试V模型5.2 软件测试W模型…

(详细简单成功版本)Mysql主从复制

博主不易&#xff0c;如果有帮助点个赞加个关注再走啊家人们 目录 介绍 配置-前置条件 大坑&#xff1a;如果两份mysql文件都是复制的一份&#xff0c;那么就修改其中一份的uuid&#xff0c;要不后续配置不成功 配置-主库Master 1.修改Mysql数据库的配置文件my.ini 2.重启…

mysql快速生成100W条测试数据(6)地区天气情况并存入mysql数据库

这是之前的文章里面包含一些以前的一些操作流程可以进行参考学习 更加详细操作步骤在第一篇文章里面 mysql快速生成100W条测试数据&#xff08;1&#xff09;&#xff1a;游戏人物数据 mysql快速生成100W条测试数据&#xff08;2&#xff09;公司员工信息 mysql快速生成100W条测…

202:vue+openlayers: easing的API及在view.animation中使用示例

第202个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中使用easing。 easing在openlayers共用五种表现形式,easeIn,easeOut,inAndOut,linear,upAndDown。 easing主要在view.animation中使用。 名称说明easeIn开始慢,然后加速easeOut开始快,然后加速inA…

PyTorch实例3——迁移学习

传送门&#xff1a;蓝桥云课实验 目录1. 实验环境2. 实验目的3. 相关原理4. 实验步骤4.1 数据收集4.1.1加载数据4.1.2 GPU运算4.2 数据预处理4.3 创建模型4.3.1 构建迁移模型4.3.2 训练模型测试绘制图表4.3.2.1 预训练模式4.3.2.2 固定值模式4.4 结论1. 实验环境 Jupyter Note…

【JavaGuide】数据库基础知识总结

数据库基础知识总结1.什么是元组, 码, 候选码, 主码, 外码, 主属性, 非主属性&#xff1f;2.主键和外键有什么区别?3.什么是 ER 图&#xff1f;4.数据库的三范式5.drop、delete 与 truncate 区别&#xff1f;1.什么是元组, 码, 候选码, 主码, 外码, 主属性, 非主属性&#xff…

el-switch 开关文字显示在开关里面

提示&#xff1a; active-color"#305BE7" active-text"开" 打开时的背景颜色和内容 inactive-color"#7D8294" inactive-text"关" 关闭时的背景颜色和内容 内容&#xff1a; <el-switch v-model"value2" class&qu…

Java 基础之文件处理

1. Stream 流 2. File 和 IO Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标&#xff1a; 2.1 控制台输入 Java 的控制台输入由 System.in 完成&#xff0c; 将 System.in 包装在一个 BufferedReader 对象中来创建一个字符流&#x…

大数据必学Java基础(一百二十二):POM模式-Maven工程关系

文章目录 POM模式-Maven工程关系 一、依赖 1、特性:依赖的传递性 2、原则:两个原则

[Linux]冯诺依曼体系结构

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文…

98家央企及下属上市企业全名单(2023版)

1月10日&#xff0c;央企专业化整合又有新动作。国家电网与国家电投生物质发电项目专业化整合项目在北京举行管理权交接仪式&#xff0c;中国电建与通用技术集团医疗资源专业化整合项目在京签约。经过整合&#xff0c;我国生物质发电领域龙头企业国能生物重组进入国家电投&…

springboot ssm招生管理系统java

招生管理系统是基于java编程语言&#xff0c;mysql数据库&#xff0c;springboot框架和idea工具开发&#xff0c;本系统分为学生和管理员两个角色&#xff0c;学生可以注册和登陆&#xff0c;查看招生公告信息&#xff0c;查看招生专业信息&#xff0c;在线申请专业&#xff0c…

Tapdata Cloud 场景通关系列:数据入湖仓之 MySQL → Doris,极简架构,更实时、更简便

【前言】作为中国的 “Fivetran/Airbyte”, Tapdata Cloud 自去年发布云版公测以来&#xff0c;吸引了近万名用户的注册使用。应社区用户上生产系统的要求&#xff0c;Tapdata Cloud 3.0 将正式推出商业版服务&#xff0c;提供对生产系统的 SLA 支撑。Tapdata 目前专注在实时数…