一、字符串函数介绍:

字符串作为程序中常用的数据类型,学会对字符串进行处理是作为一名C/C++程序员的基本功,我们要学会使用相关函数,并且对重点函数要会自己手动实现(下文对重点函数有实现代码以及相关示例)

二、字符串函数详解

1.strlen:

作用:求字符串的大小

使用:

实现:

size_t MyStrlen1(const char* str)
{assert(str!=nullptr);int len = 0;while (str[len] != '\0')len++;return len;
}

示例:

int main()
{const char* str = "123456";printf("%d\n", strlen(str));printf("%d\n", MyStrlen1(str));return 0;
}

注意:strlen记录字符串函数大小,不包括'\0';

2.strcpy:

作用:将source字符串拷贝到destnation

使用:

实现:

char* MyStrcpy(char* destination, const char* source)
{assert(destination != nullptr);assert(source != nullptr);int pos = 0;while (source[pos] != '\0'){destination[pos] = source[pos];pos++;}destination[pos] = '\0';return destination;
}

示例:

int main()
{const char* str = "123456";char* str1 = (char*)malloc(strlen(str) + 1);printf("%s", strcpy(str1, str));printf("%s", MyStrcpy(str1, str));return 0;
}

3.strncpy:

作用:从source字符串拷贝指定长度到destnation字符串中

使用:

4.strcmp:

作用:字符串的比较

使用:

实现:

int MyStrcmp(const char* dst, const char* src)
{int pos1 = 0,pos2=0;while (dst[pos1]==src[pos2]&&dst[pos1]!='\0'){pos1++;pos2++;}return dst[pos1] - src[pos2];
}

示例:

int main()
{const char* str = "123456";const char* str1 = "123456";printf("%d\n", strcmp(str1, str));printf("%d", MyStrcmp(str1, str));return 0;
}

5.strncmp:

作用:指定长度的字符串比较

使用:

6.strcat:

作用:字符串的拼接

使用:

实现:

char* MyStrcat(char* destination, const char* source)
{assert(destination != nullptr);assert(source != nullptr);size_t pos1 = MyStrlen1(destination);size_t pos2 = 0;while (source[pos2] != '\0')destination[pos1++] = source[pos2++];destination[pos1] = '\0';return destination;
}

示例:

int main()
{char str[80];char str1[80];strcpy(str, "these ");MyStrcpy(str1, "these ");strcat(str, "strings ");MyStrcat(str1, "strings ");strcat(str, "are ");MyStrcat(str1, "are ");strcat(str, "concatenated.");MyStrcat(str1, "concatenated.");printf("%s\n", str);printf("%s\n", str1);return 0;
}

7.strncat:

作用:将source的指定长度字符串拼接到目标字符串末尾

使用:

8.strstr:

作用:查找子字符串在一个字符串的首次出现位置

使用:

实现:

char* MyStrstr(char* dst, const char* src)
{assert(dst);assert(src);int pos1 = 0;while (dst[pos1]!='\0'){int pos2 = 0;if (dst[pos1] == src[pos2]){int pos = pos1;while (dst[pos] == src[pos2]){pos++;pos2++;}if (src[pos2] == '\0')return dst + pos1;}pos1++;}return dst;
}

示例:

int main()
{char str[] = "This is a simple string";char str1[] = "This is a simple string";char* pch;char* pch1;pch = strstr(str, "simple");pch1 = MyStrstr(str1, "simple");if (pch != NULL)strncpy(pch, "sample", 6);if(pch1!=nullptr)strncpy(pch1, "sample", 6);printf("%s\n", pch);printf("%s", pch1);return 0;
}

9.strtok:

作用:将字符串按照指定的分割符切割成多个子串

使用:

示例:

int main()
{char str[] = "- This, a sample string.";char* pch;printf("Splitting string \"%s\" into tokens:\n", str);pch = strtok(str, " ,.-");while (pch != NULL){printf("%s\n", pch);pch = strtok(NULL, " ,.-");}return 0;
}

三、总结:

学会使用常见字符串的函数,处理好字符串等各种问题,对我们在项目工程等方面有非常重要的基础作用,例如解决算法问题、网络协议的制定、C++string类实现等等,当然本篇文章只讲述了常用的字符串函数,对于其他函数,有兴趣的朋友们可以看一下如下网址:<cstring> (string.h) - C++ Reference

还有一个简单的思维导图,方便大家复习巩固

结语:

以上就是我分享的字符串函数的全部内容了,希望对大家有些帮助,也希望与一样喜欢编程的朋友们共进步

谢谢观看

如果觉得还阔以的话,三连一下,以后会持续更新的,我会加油的

祝大家早安午安晚安

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLO的Python实现以及 OpenCV

YOLO的Python实现以及 OpenCV Darknet 实现 YOLO 从头开始开发 YOLO模型不容易&#xff0c;所以我们要使用预训练模型在项目里进行目 标检测。你可以在 https://pjreddie.com里到所有可用的预训练模型。这是 Joseph C. Redmon的主页&#xff0c;他是 Darknet的维护者。 注意 …

译|Netflix 数据平台运营中基于机器学习自动修复系统

来自上传文件中的文章《Evolving from Rule-based Classifier: Machine Learning Powered Auto Remediation in Netflix Data Platform》 本文介绍了Netflix如何将基于规则的错误分类器与机器学习服务集成&#xff0c;实现Spark作业失败的自动修复。技术亮点包括结合规则和ML智…

PAES算法求解 ZDT1 双目标优化问题

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

逻辑回归的应用

一参数逻辑回归参数及多分类策略等完整解析LogisticRegression 初始参数声明LogisticRegression(penaltyl2, dualFalse, tol0.0001, C1.0, fit_interceptTrue, intercept_scaling1, class_weightNone, random_stateNone, solverliblinear, max_iter100, multi_classovr, verbos…

C语言(长期更新)第7讲:VS实用调试技巧

C语言&#xff08;长期更新&#xff09; 第7讲 VS实用调试技巧 跟着潼心走&#xff0c;轻松拿捏C语言&#xff0c;困惑通通走&#xff0c;一去不回头~欢迎开始今天的学习内容&#xff0c;你的支持就是博主最大的动力。 目录 C语言&#xff08;长期更新&#xff09; 第7讲 …

CONTRASTIVE-KAN:一种用于稀缺标记数据的网络安全半监督入侵检测框架

研究背景与挑战​ ​工业环境需求​: 第四次工业革命中,物联网(IoT)和工业物联网(IIoT)的普及使网络安全成为关键挑战。 入侵检测系统需实时性高,尤其对关键基础设施(如燃气管道)的快速攻击检测至关重要。 ​核心问题​: ​标签数据稀缺​:工业系统多数时间处于正常…

综合:单臂路由+三层交换技术+telnet配置+DHCP

技术考核1 实验拓扑&#xff1a;实验需求 1.按照图示配置IP地址设备名 2.在SW1和SW2之间配置链路聚合增加链路带宽&#xff0c;提高可靠性 3.PC5和PC6属于VLAN10&#xff0c; PC7和PC8属于VLAN20 4.SW1和SW2属于二层交换机&#xff0c;SW3为三层交换机&#xff08;VLAN100用于对…

工业火焰识别漏报率↓78%!陌讯多模态融合算法实战解析

原创声明&#xff1a;本文技术方案解析基于陌讯技术白皮书2025版 标签&#xff1a;#陌讯视觉算法 #火焰识别优化 #工业安全监控 #边缘计算优化一、行业痛点&#xff1a;工业火灾监控的漏检危机据《2025工业安全白皮书》统计&#xff0c;化工场景传统火焰识别系统漏报率高达35%&…

C++引用:高效安全的别名机制详解

目录 一、引用的概念 二、引用的特性 1、定义时必须初始化 2、一个变量可以有多个引用 3、引用一旦绑定实体就不能更改 三、const引用&#xff08;常引用&#xff09; 1、const引用的基本特性 2、临时对象与const引用 3、临时对象的特性 4、const 引用作为函数形参 …

大语言模型API付费?

下面是目前主流 大语言模型 API 的付费情况总览&#xff1a; &#x1f9e0; 一、主要大语言模型 API&#xff1a;是否付费对比 提供方模型是否免费限制 / 说明OpenAIGPT-3.5 / GPT-4 / GPT-4o❌ 付费为主有免费额度&#xff08;如 ChatGPT 免费版&#xff09;&#xff0c;API …

巧用Wisdom SSH:容器化运维与传统运维的抉择

巧用Wisdom SSH&#xff1a;容器化运维与传统运维的抉择 在当下的技术领域&#xff0c;容器化运维与传统运维是运维人员面临的两大主要方向&#xff0c;对于从业者来说&#xff0c;如何抉择至关重要&#xff0c;而Wisdom SSH在其中能发挥显著作用。 传统运维&#xff1a;基石…

API征服者:Python抓取星链卫星实时轨迹

API征服者&#xff1a;Python抓取星链卫星实时轨迹从基础调用到工业级卫星追踪系统实战指南一、太空数据时代&#xff1a;星链卫星的全球覆盖​​星链卫星网络规模​​&#xff1a;已发射卫星数量&#xff1a;4,000目标卫星总数&#xff1a;42,000轨道高度&#xff1a;340km - …

《深潜React列表渲染:调和算法与虚拟DOM Diff的优化深解》

当用户在内容平台无限滑动&#xff0c;或是在管理系统中处理成百上千条数据时&#xff0c;每一次无卡顿的交互&#xff0c;都是调和算法与虚拟DOM Diff机制协同工作的成果。理解这两者的底层逻辑&#xff0c;不仅是性能优化的钥匙&#xff0c;更是从“使用框架”到“理解框架”…

自动化与配置管理工具 ——Ansible

一、Ansible 概述1.1 核心特性Ansible 是一款开源的自动化运维工具&#xff0c;采用无代理&#xff08;Agentless&#xff09;架构&#xff0c;通过 SSH 协议实现对远程节点的管理。其核心特性包括&#xff1a;无代理架构&#xff1a;被管理节点无需安装代理软件&#xff0c;降…

Effective C++ 条款18:让接口容易被正确使用,不易被误用

Effective C 条款18&#xff1a;让接口容易被正确使用&#xff0c;不易被误用核心思想&#xff1a;设计接口时&#xff0c;应使正确使用方式直观自然&#xff0c;同时通过类型系统、行为约束等手段主动预防常见错误&#xff0c;减少用户犯错的可能性。 ⚠️ 1. 接口误用的常见陷…

nodejs读写文件

1.读文件 node有很多模块&#xff0c;可在node模块查看相应模块&#xff1b; var fsrequire(fs)fs.readFile(./src/a.doc,utf8,function(err,data){// 如果发生错误&#xff0c;data是undefined 如果成功 err为null console.log(err); console.log(data); }) 2.写文件 var…

ConcurrentHashMapRedis实现二级缓存

1. 为什么使用ConcurrentHashMap&#xff1f;在Java中&#xff0c;ConcurrentHashMap 是一个线程安全且高效的哈希表实现&#xff0c;广泛用于高并发场景。将其用作一级缓存的原因主要包括以下几点&#xff1a;1.1. 线程安全性ConcurrentHashMap 是线程安全的&#xff0c;支持多…

Mysql集群技术

实验在RHEL7中做&#xff0c;因为9中缺少了一个关键的高可用组件环境&#xff1a;两台数据库&#xff0c;内存和CPU要多一点主流是MYSQL&#xff08;开源&#xff09;&#xff0c;Oracle收费较贵RHEL7中直接用make编译是有问题的&#xff0c;所以需要要gcc工具做好前置准备&…

自动驾驶嵌入式软件工程师面试题【持续更新】

文章目录前言请描述 CAN 帧的基本结构&#xff08;包括标识符、数据字段、CRC 等&#xff09;描述 WebSocket 协议的基本工作流程&#xff08;包括握手、数据帧结构&#xff09;请说明如何实现 WebSocket 连接的心跳机制以检测连接状态&#xff0c;并描述在断开后如何通过重连策…

vue(5)-组件

一.组件三大组成部分&#xff08;结构/样式/逻辑&#xff09;&#xff08;1&#xff09;组件样式冲突用scoped全局样式在组件中起全局作用&#xff0c;局部样式可以加scoped属性来只作用于当前组件图中只给baseone加这个样式&#xff0c;就在baseone中style加scoped&#xff08…