C语言 模拟实现 strlen strcat strcpy函数
strlen函数
库函数strlen:strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。
用法
char c[]=“strlen”;
int len = strlen©; //输出的是数组c的长度 6
strlen和sizeof的区别
strlen是一个C语言自带的一个库函数,而sizeof是取字节运算。这是它们本质的区别,在功能方面,strlen的功能是求出字符串的实际长度。而sizeof是计算当前的参数所占的空间大小。例如:
int arr[10];
int size=sizeof(arr);
此时求出的大小不是10,而是40,因为一个int占了4个字节,10个int就占了40个字节。所以求得的是40。
代码实现strlen函数
实现strlen的方法有很多,这里我列举两种简单易懂和常用的方法。
#include<stdio.h>
#include<assert.h>//模拟实现strlen函数 方法一
int My_strlen1(const char *cp)
{//只有当传进来的字符串不为NULL,函数才可以继续执行,否则执行报错,初学者可省略。assert(cp != NULL); int len = 0; //用来接收字符串的长度并返回while (*(cp++) != '\0') //只要当前的字符不等于\0,字符指针就往前移一位,进入while循环{ len++; //只要条件成立,记录字符长度。}/* 这while循环和上面那个while循环是一样的,方便初学者看。while (*cp!= '\0'){len++;cp++;}*/return len;
}//方法二 递归
int My_strlen2(const char *cp)
{assert(cp != NULL);//当传进来的字符指针是空的,则返回0。结束此函数if (*cp == '\0')return 0;elsereturn 1+My_strlen2(cp + 1) ; //当前面的if不成立时,说明当前判断的字符不是空,则+1,且将指针移向下一位并递归调用函数。
}int main()
{char *cp1 = "strlen fun"; //10char *cp2 = "hello world"; //11int len1=My_strlen1(cp1);int len2= My_strlen1(cp2);printf("result = %d\n", len1);printf("result = %d\n", len2);return 0;
}
解释都写在代码里了,如果有看不懂得可在评论区评论,会第一时间答复。
执行结果
strcpy函数
库函数strcat :把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除dest原来末尾的“\0”)。要保证dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。
用法
char dest[10] = “strcat”;
char src[10] = “fun”;
strcat(dest, src); //此时dest=strcatfun(无空格)
代码实现strcat函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#include<string.h>char *My_strcat(char *dest, char *src)
{char *p = dest; //定义一个临时的指针来保存需要复制的字符串的首地址,有利于该函数被作为链式表达式while (*dest != '\0') //该循环是使dest指向最后\0,方便下面复制src{dest++;}//该代码解释在第二个while循环while ((*dest++ = *src++) != '\0');/*while(*src!='\0') 只要src循环不到\0,都要将内容复制到dest{*dest = *src;dest++; dest和src都向后移一位,进行下一个字符的复制src++;}*/return p; //返回dest的首地址}int main()
{char dest[20] = "strcat ";char *src = "fun";My_strcat(dest, src);printf("dest = %s\n", dest);return 0;
}
执行结果
strcpy函数
库函数strcpy :strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。
用法
char des[10];
char *src = “strcpy”;
strcpy(des, src); //des=strcpy
代码实现
实现方法和实现strcat的方法几乎一样
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#include<string.h>char *My_strcpy(char *des, const char *src)
{char *p = des; //用于保存des的首地址 链式表达式while ((*des++ = *src++) != '\0');return p; //返回des的首地址
}int main()
{char des[20];char *src = "strcpy fun";My_strcpy(des, src);printf("des = %s\n", des);return 0;
}
执行结果
谢谢大家观看,如有错误和不理解的地方可在下面评论区评论,会第一时间回复大家。
C语言 模拟实现 strlen strcat strcpy函数相关推荐
- 【C】模拟实现strlen,strcpy,strcat,strcmp,strncpy,syrcat,strnact,strncmp,strstr等字符串函数
目录 字符串函数模拟实现 1.strlen模拟实现 2.strcpy模拟实现 3.strncpy模拟实现 4.strcat模拟实现 5.strncat模拟实现 6.strcmp模拟实现 7.strnc ...
- strlen ,strcmp,strcat,strcpy函数以及实现
1.四种函数的简介与功能实现 2.四种函数的用C语言实现 第一节 四种函数的简介与功能实现 概述:四种函数作为库函数均存在于头文件<string.h>中,在程序编写时,我们可以通过头文件, ...
- C语言字符串库函数strlen、strcpy、strcat、strcmp、strstr使用详解及其实现
写在前面:现在在刷简单题的时候,老是遇到字符串操作的题,用c语言自己实现很麻烦,其实c语言也有很多对字符串操作很方便的库函数.这个博客写来一是为了巩固自己一下自己学的知识,二也可以方便大家查询. 一. ...
- C语言模拟实现strlen
strlen是用来测字符串长度的,使用时必须必须包含头文件string.h` 下面是他的原型 size_t strlen ( const char * str ); size_t代表他的返回值是个无符 ...
- 学习模拟实现strlen strcmp strcpy strcat strstr等库函数
文章目录 前言 strlen 使用方法与注意事项 模拟实现 strcmp 使用方法与注意事项 模拟实现 strcpy 使用方法与注意事项 模拟实现 strcat 使用方法与注意事项 模拟实现 strs ...
- c语言模拟实现库函数strcat,【C语言】模拟实现库函数strcat函数
CSS魔法堂:Reset CSS 下列样式规则可用于最小化各浏览器标签样式的不一致性.注意:实际使用时应该对其进行适当的调整,以适应项目要求. /* http://meyerweb.com/eric/ ...
- C语言——模拟实现字符串相关函数(strcpy、strlen)
目录
- strlen和strcpy函数的三种实现
1.计数器实现strlen函数的模拟 #include <stdio.h> #include <assert.h> int my_strlen(const char*str)/ ...
- C语言strlen等系列函数详细总结
目录 一.strlen函数 二.C语言模拟实现strlen函数的3种方法 三.str系列函数 strcpy函数 strcat函数 strcat函数模拟实现 strcmp模拟实现 一.strlen函数 ...
最新文章
- windows版本下使用xdebug
- JSP第二次作业_6小题
- Windows 不能在 本地计算机 启动 SQL Server 。错误代码126.
- 拍拍信微服务网关实践分享
- CAP理论与分布式事务解决方案
- Ubuntu 14.04 为 root 帐号开启 SSH 登录
- 机器学习统计学相关书籍
- 内购订单进行二次处理_更学教育:卖家在投诉异常订单的流程是怎么样的?
- mysql5.1事件调度器
- 决定明智地放弃对名手旋风等象棋引擎的破解...
- excel将内容粘贴到筛选后的可见单元格
- 时序数据库TSDB逐日统计的Jave算法实现过程
- 三校生计算机教学计划,三校生高考英语教学计划
- qq邮箱收信服务器imap,普通IMAP、POP邮箱的设置 教你使用iPhone邮件客户端管理QQ邮箱...
- 特斯拉电池细节_为什么特斯拉电池日实际上可以辜负炒作
- 南理工计算机科学与工程学院,周俊龙 - 南京理工大学 - 计算机科学与工程学院...
- 射线与OBB相交检测
- 史上最全图详解Jvm—诊断工具和JVM监控
- html 表格,列表,表单,select和下拉选框,textarea多行文本域,label关联控件,表单,浮动框架,结构化标签
- css 横线中间的文字
热门文章
- android 拖动进度,Android 可拖动的seekbar自定义进度值
- 89c51,8255,6个led数码管显示时钟的汇编语言程序,汇编语言要求编写一个时钟程序 用八位数码管实现时分秒的计时功能...
- java 动态实例化对象_记录Java中如何动态实例化一个对象
- matlab画坐标系,Matlab绘制图形坐标轴操作汇总 | 望天博客
- xp系统怎样启动打印机服务器,WinXP系统如何开启Printspooler服务?
- php 获取子类的方法名,php获取分类下的所有子类方法
- php比较营业时间,使用php以人类可读格式从数据库表打印餐厅营业时间
- oracle mysql 数据类型对比_Oracle、SQL Server、MySQL数据类型对比
- Qt如何调用VS编写的动态链接库(dll文件)
- vue 自定义组件 v-model