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

C/C++常用字符串函数

一、字符串函数介绍:

字符串作为程序中常用的数据类型,学会对字符串进行处理是作为一名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.dtcms.com/a/310908.html

相关文章:

  • 仿muduo库实现高并发服务器
  • 利用DeepSeek将Rust程序的缓冲输出改写为C语言实现提高输出效率
  • 自动化革命:软件开发的引擎与未来蓝图
  • carla-0.10.0 矿山地图和autoware联调
  • Rust进阶-part2-泛型
  • VAST视频广告技术实现:从零开始搭建视频广告投放系统
  • 大模型笔记1——李宏毅《2025机器学习》第一讲
  • 中科院自动化所机器人视觉中的多模态融合与视觉语言模型综述
  • 【Java】在一个前台界面中动态展示多个数据表的字段及数据
  • 第三阶段—8天Python从入门到精通【itheima】-141节(pysqark实战——数据输入)
  • True or False? 基于 BERT 学生数学问题误解检测
  • Python 第一阶段测试题 答案及解析
  • Vuex 4.0:Vue.js 应用的状态管理新篇章
  • SLAM中的非线性优化-2D图优化之零空间实战(十六)
  • TiDB 和 MySQL 的迁移过程是什么?会遇到什么问题?怎么解决的?
  • 编译器工作原理的显微镜级拆解
  • 【读代码】 KAG项目:开源知识图谱自动构建与推理平台原理与实践
  • PYTHON从入门到实践-18Django从零开始构建Web应用
  • SpringBoot3.x入门到精通系列:2.1 自动配置原理
  • 【软考中级网络工程师】知识点之 VRRP
  • 关于Web前端安全防御CSRF攻防的几点考虑
  • 关于人工智能AI>ML>DL>transformer及NLP的关系
  • MySQL(173)MySQL中的存储过程和函数有什么区别?
  • 【DeepSeek-R1 】分词系统架构解析
  • 快速了解决策树
  • API征服者:Python抓取星链卫星实时轨迹
  • Docker 部署与配置 MySQL 5.7
  • 四、Portainer图形化管理实战与Docker镜像原理
  • 2024年网络安全案例
  • 从数据丢失到动画流畅:React状态同步与远程数据加载全解析