strlen,strcpy,strcat,strcmp函数

article/2025/9/24 6:44:50

1.strlen函数

strlen函数的作用是计算给定字符串的长度,从内存的某个位置开始,遇到第一个'\0'结束。

使用样例:

int main()
{const char *ar = "abcdef";printf("%d\n", strlen(ar));
}

返回字符串"abcdef"的长度为6。

strlen函数的实现:

方法一:

size_t my_strlen(const char*string)
{assert(string != NULL);//断言,对参数进行有效性检查int count = 0;while (*string != '\0'){count++;string++;}return count;
}

方法二(通过递归):

size_t my_strlen(const char*string)
{assert(string != NULL);if (*string == '\0')return 0;return my_strlen(string + 1) + 1;
}

2.strcpy函数

strcpy,即string copy,字符串复制函数,把含有'\0'结束符的字符串复制到另一个空间地址,返回值类型为char *。

使用样例:

void main()
{char str[20] = "Hello";//str一定要有足够的空间,要能容纳拷贝进来的数据char *str1 = "World";char *res=strcpy(str, str1);printf("str=%s\n",res);
}

将str1拷贝到str中,结果为:

str一定要有足够的空间,要能容纳拷贝进来的数据,否则就会拷贝失败,如下图所示:

 

strcpy函数的实现:

char *my_strcpy(char *strDestination, const char *strSource)
{assert(strDestination != NULL && strSource != NULL);//检查参数char *pDest = strDestination;     //保护参数const char *pSrc = strSource;while (*pSrc!='\0')   //拷贝数据{*pDest = *pSrc;pSrc++;pDest++;}*pDest = '\0';//拷贝结束标记return strDestination; //返回结束标记
}

 3.strcat函数

strcat函数为字符串连接函数,它的功能是在一个字符串后面追加上一个字符串。

使用样例:

void main()
{char str[20] = "Hello";char *str1 = "World";char *res1=strcat(str, str1);printf("str=%s\n", res1);
}

将str1连接到str后面,结果为:

strcat函数的实现:

char *my_strcat(char *strDestination, const char *strSource)
{assert(strDestination != NULL && strSource != NULL);//检查参数char *pDest = strDestination;     //保护参数const char *pSrc = strSource;while (*pDest != '\0')pDest++;while (*pSrc != '\0')*pDest++ = *pSrc++;*pDest = '\0';return strDestination;
}

 4.strcmp函数

strcmp,即string compare,是字符串比较函数,用于比较两个字符串并根据比较结果返回整数。

函数样例:

int main()
{char *s1 = "hello";char *s2 = "Hello";int res3 = strcmp(s1, s2);   printf("%d\n", res3);
}

若s1=s2,返回0;

s1>s2,返回一个大于0的数;

s1<s2,返回一个小于0的数。

此样例中s1>s2,所以返回值为1。

strcmp函数实现:

方法1:

int my_strcmp(const char *string1, const char *string2)
{assert(string1 != NULL && string2 != NULL);//检查参数int res;while (*string1 != '\0'|| *string2 != '\0'){if (res=(*string1 - *string2 )!= 0)break;string1++;string2++;}if (res > 0)return 1;else if (res < 0)return -1;return res;
}

 方法2:

int my_strcmp(const char *string1, const char *string2)
{assert(string1 != NULL && string2 != NULL);//检查参数while (*string1 != '\0'&& *string2 != '\0'){if (*string1 > *string2)return 1;else if (*string1 < *string2)return -1;else{string1++;string2++;}}if (*string1 != '\0')return 1;if (*string2 != '\0')return -1;return 0;
}

5.strncpy,strncat,strncmp函数补充介绍

strncpy,strncat,strncmp为长度受到限制的字符串函数。功能和stecpy,strcat,strcmp函数相同,只是控制了作用的字符串长度。

strncpy函数的实现:

char *my_strncpy(char *strDest, const char *strSource, size_t count)
{assert(strDest != NULL&&strSource != NULL);char *pDest = strDest;const char *pSrc = strSource;while (count > 0){*pDest = *pSrc;pDest++;pSrc++;count--;}return strDest;
}

strncat函数的实现:

char *my_strncat(char *strDest, const char *strSource, size_t count)
{assert(strDest != NULL&&strSource != NULL);char *pDest = strDest;const char *pSrc = strSource;while (*pDest != '\0')pDest++;while (count > 0){*pDest = *pSrc;pDest++;pSrc++;count--;}return strDest;	
}

strncmp函数的实现:

int my_strncmp(const char *string1, const char *string2, size_t count)
{assert(string1 != NULL&&string2 != NULL);int res;while (count > 0){if ((res=(*string1-*string2))!=0)break;string1++;string2++;count--;}if (res > 0)return 1;else if (res < 0)return -1;else;return res;
}


http://chatgpt.dhexx.cn/article/2Jjojdlh.shtml

相关文章

MATLAB str char cell num格式互相转换

简介 关于如何str char cell num格式互相转换的例子很多&#xff0c;但是都很单一&#xff0c;有时候使用的时候需要查找很久才可以解决问题。这里就对这几种方法进行一个汇总。 之所以会涉及使用cell&#xff0c;是因为涉及字符串、数字在同一个“矩阵”中&#xff0c;这时候…

C++ std::string::substr()

substr()函数返回一个新建的 初始化为string对象的子串的拷贝string对象。 子串是&#xff0c;在字符位置_Off开始&#xff0c;跨越_Count个字符&#xff08;或直到字符串的结尾&#xff09;对象的部分 void main() {//std::string::substr(_Off 0, _Count 4294967295U)&am…

matlab中 str2num 函数与 str2double 函数的区别

str2num 函数与 str2double 函数的相同点与不同点 1. 相同点&#xff1a; 当str为一个含数字的字符串时&#xff0c; str2num 函数与 str2double 函数一样。 如&#xff1a; 2. 不同点&#xff1a;当str为多个字符串构成的数组时&#xff0c; str2num 函数与 str2double 函数有…

可逆计算:下一代软件构造理论

可逆计算&#xff1a;下一代软件构造理论 众所周知&#xff0c;计算机科学得以存在的基石是两个基本理论&#xff1a;图灵于1936年提出的图灵机理论和丘奇同年早期发表的Lambda演算理论。这两个理论奠定了所谓通用计算&#xff08;Universal Computation&#xff09;的概念基础…

android 微积分计算器,不到1M的良心之作 连微积分都能算的计算器APP

计算器可谓是被手机取代的一大电子产品了&#xff0c;不过手机上的APP是否真的有传统的计算器好用&#xff1f;也并不一定。 一来&#xff0c;手机上的计算器APP功能普遍偏弱&#xff0c;特别是手机ROM自带的计算器&#xff1b;二来&#xff0c;计算器APP也算得上是流氓软件的重…

matlab对信号积分,对信号求积分 - Simulink - MathWorks 中国

说明 Integrator 模块输出其输入信号相对于时间的积分值。 Simulink 将 Integrator 模块作为具有一种状态的动态系统进行处理。模块动态由以下方程指定: {x˙(t)=u(t)y(t)=x(t)x(t0)=x0 ,其中: u 是模块输入。 y 是模块输出。 x 是模块状态。 x0 是 x 的初始条件。 虽然这些…

清华大学计算机学复变函数吗,清华大学计算机系课程 - osc_vq6lx46c的个人空间 - OSCHINA - 中文开源技术交流社区...

这么NB的大学&#xff0c;这么NB的课程&#xff0c;我们还有何理由不努力&#xff0c;同是大学生&#xff0c;人家在学校学的本身就比我们多&#xff0c;还需要更加努力才能跟上步伐&#xff0c;加油。 补充&#xff1a; 清华大学计算机系的课程分为六类课程&#xff1a; (一)公…

Chapter2.4:复数和复变函数运算

该系列博客主要讲述Matlab软件在自动控制方面的应用&#xff0c;如无自动控制理论基础&#xff0c;请先学习自动控制系列博文&#xff0c;该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接&#xff1a;https://blog.csdn.net/qq_39032096/category_10287468…

信号与系统分析中的复变函数

动态图片来自于&#xff1a; ShutterStock 网站 . 01 教程规划 1.1 背景介绍 针对于信号与系统分析 课程学习的同学&#xff0c;由于之前没有先修过课程复变函数 &#xff0c;则会在后面信号与系统理论学习中缺少复变函数相关理论支持。为了帮助这部分同学及时补充上复变函数相…

matlab复变函数应用,matlab在复变函数中的一些应用修改后的.doc

matlab在复变函数中的一些应用修改后的.doc MATLAB语言课程论文MATLAB在复变函数中的一些应用姓名刘乐学号12013241953专业通信工程班级2013级通信2班指导老师朱瑜红学院物理电气性息学院完成日期2013年11月9日MATLAB在复变函数中的一些应用刘乐120132419532013级通信2班【摘要…

复变函数与积分变换matlab,matlab在复变函数与积分变换的应用

matlab在复变函数与积分变换的应用 本科毕业论文题目&#xff1a; MATLAB在复变函数与积分变换的应用 学院&#xff1a; 数学与计算机科学学院 班级&#xff1a; 数学与应用数学2009级班 姓名&#xff1a; 指导教师&#xff1a; 职称&#xff1a; 副教授 完成日期&#xff1a;…

复变函数与积分变换

复变函数与积分变换 一、拉普拉斯变换1.拉氏变换的性质a.线性性质b.相似性质c.微分性质例子例子 拉式变换 象函数的微分性质例子例子 积分性质象函数的积分性质例子例子 延迟性质位移性质拉氏变换的应用 一、拉普拉斯变换 1.拉氏变换的性质 a.线性性质 b.相似性质 pygame ursi…

unigui美化界面源码框架

对于delphier来说&#xff0c;顺应互联网时代&#xff0c;用delphi开发web程序&#xff0c;一直是一个很头痛的问题&#xff0c;以往开发delphi程序往往不需要前端和美工参与。但在ui界面上要想漂亮&#xff0c;需要配合和学习css、JS和美工知识&#xff0c;所以很多人会放弃。…

【一起学UniGUI】--UniGUI的界面与程序架构(4)

1、【统一的界面】 uniGUI是统一的图形用户界面&#xff0c;简称统一GUI。之所以称为统一的是因为它在所有带有Web浏览器的设备中提供了相同的UI体验。无论设备、操作系统、CPU和显示器是什么&#xff0c;在所有具有兼容Web浏览器的设备上&#xff0c;用户体验都是相同…

【一起学UniGUI】--创建新的uniGUI应用程序(11)

打开Delphi 10.3.1&#xff0c;在Delphi IDE中可以通过uniGUI应用程序向导轻松创建一个新的uniGUI应用程序(必须通过此方式来创建一个新的uniGUI应用程序)&#xff0c;并按向导界面提示操作。&#xff08;一&#xff09;、使用uniGUI应用程序向导创建一个新的uniGUI应用程序&am…

(1)uniGUI for C++ builder网站开发之uniGUI控件安装和你好世界

uniGUI for CBuilder网站开发之uniGUI控件安装和你好世界 By runsky中行雷威 2018.2.5 &#xff08;同一个世界&#xff0c;同一个梦想&#xff0c;交流学习CBuilder XE10&#xff0c;传承cbuilder的魅力&#xff01;欢迎各地朋友加入我的QQ群299497712,860634510、484979943…

uniGUI之UniDBGrid

uniDBGrid的相关样式设置 1.自适应列宽 代码如下&#xff08;示例&#xff09;&#xff1a; function store.load(sender, records, successful, operation, eOpts) {sender.grid.columnManager.columns.forEach(function(col){col.autoSize()}) }2.显示page当前记录及总记录…

unigui 脚本交互

http://blog.sina.com.cn/s/blog_44fa172f0102vsv0.html 【转】如何在html与delphi间交互代码 (2015-11-19 22:16:24) 转载▼ 标签&#xff1a; it 分类&#xff1a; uniGUI uniGUI总群中台中cmj朋友为我们总结了如下内容&#xff0c;对于利用delphiuniGUI开发应用&#xf…

基于UniGUI的管理系统

1.界面略图。 2.仅通过数据库即可二次开发&#xff0c;支持多个服务&#xff0c;多个数据库开发&#xff0c;轻松几步配置即可轻松打造任意管理类系统。 3.三层结构&#xff0c;支持多种数据库。 4.支持hyper_sever负载均衡。 5.dll扩展支持已开发成功。你可以使用此框架同时…

提高unigui开发效率的两个方法

1、编译时自己退出运行的程序。 在做unigui开发时&#xff0c;每次编译运行时&#xff0c;unigui的应用都会在后台运行&#xff0c;每次重新编译时都必须手工在任务栏里将应用退出才行&#xff0c;非常麻烦&#xff0c;可以在项目编译的参数里加上杀进程的命令&#xff0c;这样…