C语言 一文详解常用的字符串操作函数及模拟实现

Upwork数据战争:用爬虫与AI预测垄断订单 当普通自由职业者还在“等客户发需求”时,顶尖玩家已用数据预测客户明天需要什么; 当竞争对手熬夜抢单时,你的爬虫早已自动提交提案—— 这不是科幻,而是2025年的现实! 本文将手把手教你用合法工具搭建“数据战情室”,让每个决策都有万亿级数据支撑! 阅读详情

目录

前言

字符分类函数

字符串操作函数

strlen()

模拟实现

strcpy()

模拟实现

strcat()

模拟实现

strcmp()

模拟实现

strncpy()

strncat()

strncmp()

strstr()

​​​​​​​模拟实现 

strtok()

strerror()

小结


前言

在前面部分我们说了C语言中数组, 函数等等这样的知识点, 这一部分, 我们来说说C语言中我们会常常用到的字符串操作函数和内存操作的库函数~~, 肥肠有用~~

字符分类函数

C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。

这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h

这些函数的使⽤⽅法⾮常类似,我们就说说⼀个函数的事情,其他的⾮常类似: 

int islower ( int c );

islower 是能够判断参数部分的 c 是否是⼩写字⺟的。

通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回 0。

练习: 写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变。

#include <stdio.h>
#include <ctype.h>
int main ()
{
 int i = 0;
 char str[] = "Test String.\n";
 char c;
 while (str[i])
 {
     c = str[i];
     if (islower(c)) 
     c -= 32;
      putchar(c);
      i++;
 }
 return 0;
}

字符串操作函数

strlen()

size_t strlen ( const char * str );

字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0')。

参数指向的字符串必须要以 '\0' 结束。

注意函数的返回值为size_t,是⽆符号的( 易错 )

strlen的使⽤需要包含头⽂件

学会strlen函数的模拟实现

#include <stdio.h>
#include <string.h>
int main()
{
 const char* str1 = "abcdef";
 const char* str2 = "bbb";
 if(strlen(str2)-strlen(str1)>0)
 {
 printf("str2>str1\n");
 } 
 else
 {
 printf("srt1>str2\n");
 }
 return 0;
}

模拟实现

一:

//计数器⽅式
int my_strlen(const char * str)
{
 int count = 0;
 assert(str);
 while(*str)
 {
 count++;
 str++;
 }
 return count;
}

 二:

//不能创建临时变量计数器
int my_strlen(const char * str)
{
 assert(str);
 if(*str == '\0')
 return 0;
 else
 return 1+my_strlen(str+1);
}

三:

//指针-指针的⽅式
int my_strlen(char *s)
{
 assert(str);
 char *p = s;
 while(*p != ‘\0’ )
 p++;
 return p-s;
}

strcpy()

char * strncpy ( char * destination, const char * source, size_t num );

源字符串必须以 '\0' 结束。

会将源字符串中的 '\0' 拷⻉到⽬标空间。

⽬标空间必须⾜够⼤,以确保能存放源字符串。

⽬标空间必须可修改。

模拟实现

//1.参数顺序
//2.函数的功能,停⽌条件
//3.assert
//4.const修饰指针
//5.函数返回值
//6.题⽬出⾃《⾼质量C/C++编程》书籍最后的试题部分
char *my_strcpy(char *dest, const char*src)
{ 
 char *ret = dest;
 assert(dest != NULL);
 assert(src != NULL);
 
 while((*dest++ = *src++))
 {
 ;
 }
 return ret;
}

strcat()

源字符串必须以 '\0' 结束。

⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。

⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。

⽬标空间必须可修改。

字符串⾃⼰给⾃⼰追加,如何?

模拟实现

char *my_strcat(char *dest, const char*src)
{
 char *ret = dest;
 assert(dest != NULL);
 assert(src != NULL);
 while(*dest)
 {
 dest++;
 }
 while((*dest++ = *src++))
 {
 ;
 }
 return ret;
}

strcmp()

第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字

第⼀个字符串等于第⼆个字符串,则返回0

第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字

那么如何判断两个字符串? ⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩。

​​​​​​​模拟实现

int my_strcmp (const char * str1, const char * str2)
{
 int ret = 0 ;
 assert(src != NULL);
 assert(dest != NULL);
 while(*str1 == *str2)
 {
 if(*str1 == '\0')
 return 0;
 str1++;
 str2++;
 }
 return *str1-*str2;
}

strncpy()

char * strncpy ( char * destination, const char * source, size_t num );

拷⻉num个字符从源字符串到⽬标空间。

如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。

strncat()

char * strncat ( char * destination, const char * source, size_t num );

Appends the first num characters of source to destination, plus a terminating null-character.

(将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个 \0字符)。

If the length of the C string in source is less than num, only the content up to the terminating null-character is copied.(如果source 指向的字符串的⻓度⼩于num的时候,只会将字符串中到\0 的内容追加到destination指向的字符串末尾)。

strncmp()

int strncmp ( const char * str1, const char * str2, size_t num );

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0.

strstr()

char * strstr ( const char * str1, const char * str2);

Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.

(函数返回字符串str2在字符串str1中第⼀次出现的位置)。

The matching process does not include the terminating null-characters, but it stops there.(字符

串的⽐较匹配不包含 \0 字符,以 \0 作为结束标志)。

/* strstr example */
#include <stdio.h>
#include <string.h>
int main ()
{
 char str[] ="This is a simple string";
 char * pch;
 pch = strstr (str,"simple");
 strncpy (pch,"sample",6);
 printf("%s\n", str);
 return 0;
}

​​​​​​​模拟实现 

char * strstr (const char * str1, const char * str2)
{
 char *cp = (char *) str1;
 char *s1, *s2;
 if ( !*str2 )
 return((char *)str1);
 while (*cp)
 {
   s1 = cp;
   s2 = (char *) str2;
   while ( *s1 && *s2 && !(*s1-*s2) )
    s1++, s2++;
   if (!*s2)
     return(cp);
   cp++;
 }
 return(NULL);
}

strtok()

char * strtok ( char * str, const char * sep);

sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合

第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标 记。

strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容 并且可修改。)

strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串 中的位置。

strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标 记。

如果字符串中不存在更多的标记,则返回 NULL 指针。

#include <stdio.h>
#include <string.h>
int main()
{
 char arr[] = "192.168.6.111";
 char* sep = ".";
 char* str = NULL;
 for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
 {
 printf("%s\n", str);
 }
 return 0;
}

strerror()

char * strerror ( int errnum );

strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。

在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回

#include <errno.h>
#include <string.h>
#include <stdio.h>

int main()
{
 int i = 0;
 for (i = 0; i <= 10; i++) {
     printf("%s\n", strerror(i));
 }
 return 0;
}

小结

像这些C/C++中的库函数的使用, 大家都可以上
https://legacy.cplusplus.com/https://legacy.cplusplus.com/网站查找, 都会有很详细的说明~~

文中的一些英文描述 也是来自于这个网站

【定位模块项目实战】正态分布变换(NDT)定位及建图(依赖高精度点云地图和三维激光雷达的定位方案) 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、正态分布变换(NDT)定位解决的主要问题二、正态分布变换(NDT)定位的核心思想三、NDT算法流程1.多元正态分布概念2.网格化并计算正态分布参数3.变换参数和最大似然四、使用C++实现NDT配准参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对依赖高精度地图和激光雷达的定位技术–正态分布变换(NDT)定位做个简单的介绍,具体 阅读详情

相关推荐

C语言新手必练:10个实战小项目带你快速上手(附完整代码)

本文为C语言初学者精选10个实战项目,从基础的温度转换器到高级的迷宫求解算法,涵盖输入输出、条件判断、循环控制、数组操作等核心知识点。每个项目配有完整代码和详细解析,帮助新手通过实践掌握编程思维,特别适合刚学完语法但缺乏实战经验的学习者。

weixin_29208077的博客 736

【C语言】模拟实现深入了解:字符串函数

本篇将模拟实现字符串函数,通过底层了解更多相关细节.以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二C语言笔记,希望对你在学习C语言中有所帮助!

专注于 C/C++ 后端开发,涵盖基础语法、Linux系统与网络、MySQL数据库、常见算法及项目经验。 2260

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 183

用c语言模拟实现常用字符串函数

字符串strlen是用来求字符串长度的,我们可以打开cpp网站查看有关信息该函数用来求字符串长度,求的是‘\0’之前字符的个数,函数参数为字符指针,因为该函数不需要修改字符串的值,故为了保护字符串被意外修改,设置为只读,所以在参数字符指针用const修饰,返回值即为字符串的长度,下面以经典helloworld字符串为例:输出结果:字符串arr1为“helloworld”,一个10个字符,该字符串长度则为10,输出结果正确。

黄超的博客 2557

因果推断综述-A Survey on Causal Inference

最近读到一篇讲述很全面的综述文献-《A Survey on Causal Inference》,对于接触因果推断不久的同学而言是特别详细的介绍和科普。文献很长,我会分成几部分介绍。 目录 摘要 第一部分:简介 第二部分:因果推断基础知识 第三部分:基于三种假设的因果推断方法 第四部分:实验 第五部分:应用 摘要 几十年来,因果推理是一个跨许多领域的关键研究主题,如统计、计算机科学、教育、公共政策和经济学。与随机对照试验相比,研究方向由于可用数据量大且预算要求低,如今,从观测数据..

海边凝望的博客 3182

别慌!Oracle MOS登录页面大变样?5分钟搞定新旧账号登录全流程

本文详细解析Oracle MOS登录页面改版后的新旧账号登录流程,帮助用户快速适应账号体系变革。针对传统MOS账号和OCI账号的不同应用场景,提供5分钟内完成无缝切换的实用指南,包括登录步骤、书签设置和密码管理策略,助力数据库管理用户高效访问Oracle技术支持资源。

weixin_30275415的博客 514

【C语言】字符串函数及模拟实现strlen&&strcpy&&strcat&&strcmp

[C语言]字符串函数的介绍以及模拟实现——strlen&&strcpy&&strcat&&strcmp 不看后悔系列

weixin_60478154的博客 6818

从混乱到清晰:用QJsonObject重构你的Qt网络API数据解析层(避坑指南)

本文详细介绍了如何使用QJsonObject重构Qt网络API数据解析层,避免常见的JSON解析陷阱。通过安全解析模式、数据绑定和性能优化技巧,帮助开发者构建高效、健壮的解析逻辑,提升代码可维护性和可读性。特别适用于处理复杂嵌套的JSON响应数据场景。

weixin_29011667的博客 230

C语言-常用字符函数详解+模拟实现

今天是2021年9月21日,首先祝大家中秋节快乐啦!但愿人长久,千里共婵娟。又是一年月圆,祝大家在中秋节都能和你爱的人和爱你的人团圆~ 接下来进入整体啦~ 目录 1.字符函数 strlen() strcpy() strcat() strncpy() strcmp() strncat() strncmp() strstr() strtok() 2.总结 下列函数都是包含在#include<string.h>的库函数,若要使用,要现在最开始包含这个库 strlen().

chuxinchangcun的博客 2918

Android 车载应用开发与优化(1) - CarLauncher 核心功能与动态集成探秘

本文深入探讨了Android车载应用开发中CarLauncher的核心功能与实现原理。作为车载系统的“脸面”,CarLauncher不仅提供应用入口,更通过动态集成技术将地图、音乐等关键信息嵌入桌面,以保障驾驶安全与体验。文章详细解析了其源码结构、权限配置、应用启动机制以及基于Activity嵌入的动态集成黑魔法,为开发者提供了从基础认识到高级优化的完整指南。

weixin_29239279的博客 281

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。

jasonj333 1159

C语言之常用字符串函数总结、使用和模拟实现

本文介绍和模拟实现的字符串函数有:strlen、strcpy、strcat、strcmp、strncpy、strncat、strncmp、strstr。另外详细介绍了strtok 、strerror、perror函数的使用。基本囊括了所有常用的字符串函数。模拟实现有助于我们理解和记忆这些库函数,我们都能够自己实现这些库函数,使用时需要注意的细节我们肯定也更加清楚和深刻。最后,希望本文的内容能够帮助到大家更好的理解这些库函数

x_p96484685433的博客 2762

【WorkBuddy从入门到精通实战教程】实战案例 第 18 章 把投资分析(炒股)变成你的日常

投资本身就是一件高度信息密集、强结构化、又极度依赖判断的事:读不完的财报、理不清的行业、吵不停的多空。而整理碎片信息、拆解复杂材料、把思考过程摆到台面上,恰好是 AI 擅长的。 在一次完整的股票研究里,AI 到底能替你做掉哪些低质量的重复劳动,把精力还给判断本身。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 461

C语言常用的字符串函数及模拟实现详解!

掌握常用的字符串函数,会有很多好处。可以更方便地处理字符串操作,大大提高代码的可读性和可维护性,避免自己编写复杂的字符串处理逻辑,从而减少错误的可能性。另外,一些字符串函数还可以提高程序的运行效率,比如使用 strstr 函数来查找字符串中的子串,比自己遍历字符串要快得多。总之,掌握字符串函数可以让C 语言编程更加高效、准确。那么本篇文章围绕常用的字符串函数进行运用及模拟实现,帮大家深入理解这些函数,以便更灵活地运用。1.strlen的使用和模拟实现。

y2212023701的博客 2109

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【C字符串函数】——对C语言中有关字符串库函数的实现及模拟

对C语言中关于字符串的库函数:strlen、strcmp、strncmp、strcpy、strncpy、strstr、strtor、strcat、strncat、strerror等的实现和模拟实现

诺诺的包包 1343

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【C进阶】——详解10个C语言中常见的字符串操作函数及其模拟实现

1.求字符串长度——strlen2.字符串拷贝——strcpy3.字符串追加函数——strcat4.字符串比较函数——strcmp5.小结6. strncpy7. strncat8. strncmp8.1演示练习9.字符串查找函数——strstr9.1使用及注意事项9.2strstr的模拟实现10. strtok10.1功能解释及使用说明10.2 代码演示及优化11. strerror

m0_70980326的博客 2855

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C语言常用的字符串函数(含模拟实现)

在使用C语言编写代码的时候,我们经常会用到一些库函数来实现一些平常难以实现的功能,今天我就为大家来分享一些我经常会用到的库函数,并且也会将他们的用法和部分的模拟实现函数分享给大家~

爱是小小的癌的博客 2009

c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))

strlen函数用于求取字符串的长度,不受限制。strcpy函数用于将一个字符串复制到另一个字符串中。strcat函数用于将一个字符串连接到另一个字符串的末尾。strcmp函数用于比较两个字符串是否相等。另外,还有长度受限制的字符串函数,如strncpy函数用于将一个字符串的一部分复制到另一个字符串中,strncat函数用于将一个字符串的一部分连接到另一个字符串的末尾,strncmp函数用于比较两个字符串的前n个字符是否相等。

qq_74415153的博客 1541

C语言常用字符函数和字符串函数的模拟实现

字符函数和字符串函数都是在编程中用来处理字符和字符串的函数。字符函数是用来处理单个字符的函数,比如查找、替换、转换大小写、比较等操作。判断一个字符是否为字母;isdigit():判断一个字符是否为数字;islower():判断一个字符是否为小写字母;isspace():判断一个字符是否为空格符;toupper():将一个字符转换为大写字母;tolower():将一个字符转换为小写字母;strchr():在一个字符串中查找指定字符的位置;strstr():在一个字符串中查找指定字符串的位置。

qq_74013365的博客 1444

C语言常用字符串函数详解

对C语言标准库里面的string.h常用的函数进行解释说明,并模拟实现,有助于更好的运用和理解C语言里面的字符串库函数

weixin_43164548的博客 2456

C语言【常用】【字符函数 和 字符串函数】详解加模拟实现

1. 字符分类函数 2. 字符转换函数 3. strlen    的使用和模拟实现 4. strcpy   的使用和模拟实现 5. strcat    的使用和模拟实现 6. strcmp  的使用和模拟实现 7. strncpy 函数的使用 8. strncat  函数的使用 9. strncmp函数的使用 10. strstr   的使用和模拟实现 11. strtok  函数的使用 12. strerror函数的使用

2401_88433210的博客 864

c语言中常见的字符串操作函数,内存操作函数及其他函数详解

strlen函数 1.函数原型 size_t strlen(const char *string ); 我们也可以打开MSDN查看他的原型 2.函数功能:求一个字符串指定string字符串的长度 3.strlen函数的实现: 实现的思想是这样的我们只要让一个指针指向字符串的起始位置,让他一直往后走直到遇到\0就停止在上述过程中用计数器count统计str走了多少步,count的值就是这个字符串的长度了 代码实现: #include<stdio.h> #incl.

qq_56999918的博客 1713

C语言字符串操作函数(库函数)及其实现

字符串操作函数(库函数)及其实现,strlen、strcpy、strcat、strcmp、strncpy、strncmp、strncat、strtok、strstr、strerror、memcpy、memmove、memcmp。

小小小智_x0__0x_的博客 3462

【C语言】模拟实现字符串函数——strcat

模拟实现字符串函数之strcat函数

qq_63320529的博客 2311

C语言--字符串操作函数、内存操作函数介绍及模拟实现

文章目录前言一、函数介绍1.1 strlen1.2 strcpy1.3 strcat1.4 strcmp1.5 长度受限制的字符串函数strncpy、strncat、strncmp1.5.1 strncpy1.5.2 strncat1.5.3 strncmp1.6 strstr1.7 strtok1.8 strerror1.9 perror1.10 字符分类函数1.11 memcpy1.12 memmove1.13 memcmp1.14 memset二、库函数模拟实现2.1 模拟实现strlen2.2 模拟

羟基与苯的博客 1689

【C语言】字符串函数及其模拟实现

字符串常用函数基本介绍

BinaryWiker的博客 1357
上一篇: Linux 一文详谈Vim编辑器的使用
下一篇: 数据结构 详谈什么是数据结构及顺序表
万我.
博客等级 码龄1年 460粉丝 93原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值