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

简单介绍C语言中的字符串函数

1.首先给出字符分类函数这几个就简单过一下不做重点说明。这两个为字符转换函数顾名思义没什么好介绍的接下来简单介绍几个字符串函数strlen.strcpy.strcat.strstr.strncpy.strncat.memcpy.memmove;strlen:求字符串的长度实现代码size_t my_strlen(const char* str){size_t count 0;while (*str ! \0){count;str;}return count;}这个就是用计数器的原理来计算字符串的长度当然也可以通过双指针来求。strcpy把一个字符串拷贝到另一个字符串里实现代码//char* strcpy(char* dest, char* scr)//{// assert(dest!NULL);// assert(scr!NULL);// char* cur scr;// while (*dest *scr)// {// ;// }// return cur;//}因为要返回找到这个数组所以一般重新定义一个新指针来指向开始的位置strcat把一个数组追加到另一个数组后面。代码实现char* strcat(char*dest,char*scr){assert(dest scr);char* cur dest;while (*dest ! \0)dest;while (*dest *scr);return cur;}第一个while循环找到被追加的数组的最后面第二个while开始一个个追加strstr在一个字符串中寻找另一个字符串。实现代码char* my_strstr(const char* str1, const char* str2){char* s1 NULL;char* s2 NULL;char* cur str1;while (cur){char* s1 cur;char* s2 str2;while (*s1 ! \0 *s2 ! \0 *s1 *s2){s1;s2;}if (*s2 \0){return (char*)cur;}cur;}return NULL;}int main(){char str1[] abbbcdef;char str2[] bbc;char* rel my_strstr(str1, str2);if (rel NULL){printf(找不到\n);}else{printf(%s, rel);}return 0;}strstr实现中就比较复杂了在两个字符串中找相同部分在代码中就要一一比对如果比对第一个代码时不对那就两边的指针都要加加进入下一个比较如果第一次比对成功第二次也成功后来失败了前面指针开始走的位置就需要一个新的指针来记录位置两个字符串就需要两个新指针然后strstr是成功还回成功匹配时的开始位置所以还要再建立一个新指针来记住位置如果整个字符串对比完了还没找到就还回NULL这边代码就需要3个新的指针在比对时需进行画图更加方便理解。strncpy和strncat在书写上和它们就只差n在写函数时多了个参数你n这个n是说在这个位置向后拷贝或者加上多少个字符代码跟上面的几乎差不多char* strcpy(char* dest, char* scr,int n){assert(dest!NULL);assert(scr!NULL);char* cur dest;while (n--){*dest *scr;}return cur;}int main(){int n 3;char arr1[] xxxxxxxxxxxxxxxxxxxx;char arr2[] hello world;char*relstrcpy(arr1,arr2,n);printf(%s,rel);return 0;}char* strcat(char* dest, char* scr,int n){assert(dest scr);char* cur dest;while (*dest ! \0)dest;while (n--)*dest *scr;return cur;}int main(){int n 3;char arr1[20] hello ;char arr2[] world;char* a strcat(arr1, arr2,n);printf(%s, a);return 0;}这里我就不过多赘述了。memcpy和memmove两个函数都是把一个地方的内存拷贝n个字节到另一个内存但是memmove可以处理重叠功能更加完善代码实现void* my_memcpy(void* dest, void* scr, size_t num)//num单位是字节{assert(scrdest);char* cur dest;while (num--){*((char*)dest) *((char*)scr);scr (char*)scr 1;dest (char*)dest 1;}return cur;}int main(){int arr1[] {1,2,3,4,5,6,7,8,9};int arr2[20] { 0 };my_memcpy(arr2,arr1,20);for (int i0;i10;i){printf(%d , arr2[i]);}return 0;}这里需注意拷贝是按一个字符一个字符来进行拷贝所以需要强转成char*但是如果是在同一块内存中有重合部分则会拷贝失败memmove就出来了代码实现void my_memmove(char*dest,const char*str,size_t n){assert(deststr);char* rel dest;if (deststr)//从前向后{while (n--){*dest *str;str*(char*)str 1;dest *(char*)dest 1;}}else{while (n--)//从后向前{*((char*)destn) *((char*)strn);}}return rel;}int main(){int arr[] { 1,2,3,4,5,6,7,8,9,10};my_memmove(arr 2, arr, 20);//第三个参数单位是字节for (int i0;i10;i){printf(%d ,arr[i]);}return 0;}这个就按dest和str的位置关系来考虑从前往后拷贝还是从后往前拷贝感谢观看

相关文章:

简单介绍C语言中的字符串函数

1.首先给出字符分类函数这几个就简单过一下,不做重点说明。这两个为字符转换函数,顾名思义,没什么好介绍的;接下来简单介绍几个字符串函数:strlen.strcpy.strcat.strstr.strncpy.strncat.memcpy.memmove;strlen:求字符…...

Phi-3-mini-4k-instruct-gguf多场景落地:跨境电商多语言商品描述批量生成

Phi-3-mini-4k-instruct-gguf多场景落地:跨境电商多语言商品描述批量生成 1. 跨境电商的痛点与解决方案 跨境电商卖家每天面临的最大挑战之一,就是为同一款商品准备不同语言版本的描述。传统做法要么需要雇佣多语种文案人员,要么使用机械的…...

智能车调参手记:我用Kp=200, Ki=60, Kd=40让小车稳如老狗

智能车调参手记:我用Kp200, Ki60, Kd40让小车稳如老狗 凌晨三点的实验室里,咖啡杯已经见底,眼前的智能车在测试跑道上又一次冲出了弯道。这已经是本周第七次熬夜调试,上坡时的速度波动问题始终困扰着我们。就在准备放弃的时候&…...

Android Studio中文界面汉化终极指南:5分钟打造舒适开发环境

Android Studio中文界面汉化终极指南:5分钟打造舒适开发环境 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为An…...

CLIP-GmP-ViT-L-14图文匹配工具实测:电商搜图、智能相册应用场景解析

CLIP-GmP-ViT-L-14图文匹配工具实测:电商搜图、智能相册应用场景解析 你有没有想过,当你在电商平台用一张随手拍的照片搜索商品时,背后的技术是怎么工作的?或者,当你对着手机相册输入“去年夏天在海边拍的日落”&…...

深入解析Jinja2模板引擎:render与generate函数的实战应用

1. Jinja2模板引擎基础入门 第一次接触Jinja2时,我完全被它的简洁和强大震撼到了。这个由Armin Ronacher开发的模板引擎,最初是为了解决Django模板的局限性而诞生的。经过多年发展,它已经成为Python生态中最受欢迎的模板引擎之一。 安装Jinja…...

Starry Night Art Gallery效果展示:黄金渐变按钮交互+实时生成反馈

Starry Night Art Gallery效果展示:黄金渐变按钮交互实时生成反馈 1. 沉浸式艺术体验:当AI遇见文艺复兴 想象一下,你走进的不是一个冰冷的AI工具界面,而是一座数字艺术殿堂。四周是深邃的墨蓝色背景,如同梵高笔下的夜…...

别只盯着时钟了!用Vivado的Set_Data_Check搞定FPGA里两个数据信号的时序检查(附工程源码)

FPGA时序约束进阶:用Set_Data_Check精准控制数据信号时序关系 在FPGA设计中,时序约束是确保电路功能正确性的关键环节。大多数工程师对时钟与数据信号之间的setup/hold约束已经驾轻就熟,但当面对两个数据信号之间的时序关系时,却常…...

8-Bit美学不妥协性能|像素剧本圣殿UI渲染与LLM推理资源隔离方案

8-Bit美学不妥协性能|像素剧本圣殿UI渲染与LLM推理资源隔离方案 1. 项目概述 像素剧本圣殿(Pixel Script Temple)是一款专为剧本创作者设计的AI辅助工具,基于Qwen2.5-14B-Instruct大模型深度微调开发。它将高性能AI推理能力与独…...

3步解锁B站4K视频:bilibili-downloader零基础使用指南

3步解锁B站4K视频:bilibili-downloader零基础使用指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法保存B站4…...

Spring Boot 基础学习笔记

Spring Boot 基础学习笔记 一、Spring Boot 概述 1. 定义 Spring Boot 是 Pivotal 团队基于 Spring 框架开发的快速开发脚手架,核心宗旨是简化 Spring 应用的初始化搭建和开发流程,通过「约定优于配置」的思想,大幅减少 XML 配置和繁琐的依…...

DriverStore Explorer:突破Windows驱动管理瓶颈,释放系统空间提升80%存储效率

DriverStore Explorer:突破Windows驱动管理瓶颈,释放系统空间提升80%存储效率 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 诊断存储异常:设…...

解锁浏览器潜能:用户脚本实用指南

解锁浏览器潜能:用户脚本实用指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 你是否常常觉得浏览器功能不够用?想让网页自动完成重复操作?希望个性…...

重组胶原蛋白 | 可溶性蛋白 | 蛋白纯化 | 原核与真核系统

在生命科学研究中,重组胶原蛋白(Recombinant Collagen)作为一种关键的生物大分子,因其独特的结构特点和在细胞外基质研究中的重要性而被广泛关注。一、胶原蛋白分子构成与分类胶原蛋白(Collagen)是动物体内…...

HDSceneColor节点]原理解析与实际应用

渲染管线兼容性详解HD Scene Color节点的可用性完全取决于所使用的渲染管线,这是开发者在选择和使用该节点时必须首先考虑的因素。高清渲染管线(HDRP)支持HDRP是Unity针对高端平台和高端硬件设计的高保真渲染解决方案HD Scene Color节点专为H…...

Ubuntu 虚拟机 Python3 + pip 完整安装教程

文章目录一、先检查系统是否自带 Python3二、安装 Python3 和 pip(必装)1. 更新软件源2. 安装 python3 和 pip3. 验证安装成功三、最简单的使用方法1. 运行 Python2. 用 pip 安装第三方库(如 requests、numpy)3. 运行 .py 文件四、…...

MongoDB(70)如何使用副本集进行备份?

使用副本集进行备份是一个常见的MongoDB备份策略,因为副本集提供了数据冗余和高可用性。通过从副本集中读取数据,可以在不影响主节点的情况下进行备份。以下是详细的步骤和示例代码,展示如何使用 MongoDB 副本集进行备份。方法一:…...

DevOps工具链集成:GitLab CI、Jenkins与Argo CD如何选?

DevOps工具链集成:GitLab CI、Jenkins与Argo CD如何选? 在DevOps实践中,工具链的选型直接影响交付效率与系统稳定性。GitLab CI、Jenkins和Argo CD作为主流工具,分别覆盖持续集成(CI)、持续交付&#xff0…...

Java八股文面试题,堪称2026最强!!!

1、什么是 java 序列化,如何实现 java 序列化 难度系数:⭐ 序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在…...

忍者像素绘卷:天界画坊Python入门实战,3步搭建AI绘画环境

忍者像素绘卷:天界画坊Python入门实战,3步搭建AI绘画环境 1. 前言:当Python遇见像素艺术 还记得小时候玩过的8-bit游戏吗?那些由一个个小方块组成的像素世界,如今正以全新的方式回归。天界画坊是一个开源的AI绘画工具…...

Qwen2.5-VL图文助手体验:RTX 4090极速推理,支持对话历史和一键清空

Qwen2.5-VL图文助手体验:RTX 4090极速推理,支持对话历史和一键清空 如果你手头有一张RTX 4090显卡,想找一个能看懂图片、能聊天、还能帮你处理各种视觉任务的本地AI助手,那么今天要聊的这个工具,你可能会很感兴趣。 …...

C++ 智能指针陷阱与调试技巧

C智能指针陷阱与调试技巧 在现代C开发中,智能指针是管理动态内存的利器,能有效避免内存泄漏和悬空指针等问题。若使用不当,智能指针本身也可能成为陷阱,导致难以察觉的bug。本文将深入探讨几种常见的智能指针陷阱,并分…...

Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程

Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子…...

MiniCPM-V-2_6 Ubuntu 20.04一键部署教程:从安装到运行

MiniCPM-V-2_6 Ubuntu 20.04一键部署教程:从安装到运行 想试试那个能看懂图片还能跟你聊天的多模态大模型MiniCPM-V-2_6吗?很多朋友在第一步——部署上就被卡住了,不是环境依赖搞不定,就是权限问题报错,折腾半天模型还…...

告别信息混乱:Trilium中文版让知识管理像整理衣柜一样简单

告别信息混乱:Trilium中文版让知识管理像整理衣柜一样简单 【免费下载链接】trilium-translation Translation for Trilium Notes. Trilium Notes 中文适配, 体验优化 项目地址: https://gitcode.com/gh_mirrors/tr/trilium-translation 还在为英文笔记软件的…...

【数据结构】数组与特殊矩阵

数据结构的学习中,数组与特殊矩阵是基础且核心的内容。它们不仅是程序设计中最常用的线性结构,更是处理复杂矩阵运算的基础。本文将结合解析与真题,带你彻底搞懂数组的存储方式和特殊矩阵的压缩存储技巧。一、一维数组与二维数组:…...

Go Module 依赖冲突调试方法

Go Module 依赖冲突调试方法 在Go语言开发中,依赖管理是一个关键环节。随着项目规模的扩大,依赖的第三方库越来越多,版本冲突问题也愈发常见。Go Module作为官方推荐的依赖管理工具,虽然简化了依赖管理流程,但在多级依…...

Cocos Creator实战:5步搞定棋牌游戏大厅场景开发(附完整代码)

Cocos Creator实战:5步构建高交互棋牌游戏大厅(附模块化代码) 棋牌游戏大厅作为玩家进入游戏的第一印象,其体验直接决定了用户留存率。根据行业数据,精心设计的大厅界面能提升30%以上的玩家次日留存。不同于传统游戏开…...

2026实测不踩坑!6款成品PPT网站客观测评

2026实测不踩坑!6款成品PPT网站客观测评作为常年深耕AI工具测评的博主,日常需应对各类PPT创作需求,也经常收到粉丝咨询相关工具选择。经过实测多款成品PPT网站后,整理出6款适配性较强的平台,涵盖不同需求场景&#xff…...

SpringBoot 3.2.0 项目里,如何优雅地引入 Flowable 7.1.0 工作流引擎?

SpringBoot 3.2.0 项目优雅集成 Flowable 7.1.0 工作流引擎实战指南 在微服务架构中引入工作流引擎,往往意味着需要在不破坏现有架构的前提下实现业务流程的自动化管理。本文将深入探讨如何在已具备MyBatis-Plus、Spring Cloud Alibaba等技术栈的SpringBoot 3.2.0项…...