0


C语言简易模拟字符串函数(strlen、strcpy、strcat、strcmp)

C语言简易模拟字符串函数

模拟实现的字符串函数

该文章将简易模拟实现strlen、strcpy、strcat、strcmp、strstr。那么让我们废话少说,直接开始吧。

一、strlen

strlen-Get string length.即获取字符串长度。函数参数为 const char str*,函数返回类型为 size_t。如下图所示:
strlen函数返回类型和参数
strlen函数的读取结束标志为’\0’,因此,若字符串中没有’\0’,字符串长度则为随机值。

下面将以三种方式模拟实现strlen函数,函数将命名为 my_strlen

1.使用计数器

#include<stdio.h>#include<assert.h>size_tmy_strlen(constchar* str){assert(str);//断言一下传过来的参数是否为空指针size_t count =0;//设置一个计数器while(*str++){
        count++;}return count;}intmain(){char arr[]="hello world!";int ret =my_strlen(arr);printf("%d\n", ret);return0;}

显示结果:
在这里插入图片描述

该方法为设置一个计数器变量 count,让计数器在指针每增加一个字节时自增一,当 *str 为’\0’时,循环结束,返回的count就是字符串长度。

2.使用函数递归

#include<stdio.h>#include<assert.h>size_tmy_strlen(constchar* str){assert(str);if(*str !='\0')return1+my_strlen(str +1);elsereturn0;}intmain(){char arr[]="hello world!";int ret =my_strlen(arr);printf("%d\n", ret);return0;}

显示结果:
在这里插入图片描述

3.使用指针-指针

#include<stdio.h>#include<assert.h>size_tmy_strlen(constchar* str){assert(str);constchar* start = str;constchar* end = str;while(*end !='\0'){
        end++;}return end - start;}intmain(){char arr[]="hello world!";int ret =my_strlen(arr);printf("%d\n", ret);return0;}

显示结果:
在这里插入图片描述

二、strcpy

strcpy-Copy string.即拷贝字符串。函数参数为 char dest* 和 const char scr,函数返回类型为 char。如下图所示:
在这里插入图片描述
源字符串必须以’\0’结束,目标字符串会将’\0’一同拷贝
下面将模拟实现strcpy,函数命名为
my_strcpy

#include<stdio.h>#include<assert.h>char*my_strcpy(char* dest,constchar* scr){assert(dest);assert(scr);char* start = dest;//记录目标指针的起始位置while(*dest++=*scr++){;}return start;}intmain(){char arr1[20]="xxxxxxxxxxxxxxxxxxx";char arr2[]="hello world!";printf("%s\n",my_strcpy(arr1, arr2));return0;}

显示结果:
在这里插入图片描述

三、strcat

strcat-Concatenate strings.即连接字符串。函数参数为 char dest* 和 const char scr,函数返回类型为 char。如下图所示:
在这里插入图片描述
源字符串必须以’\0’结束,否则程序将崩溃。
下面将模拟实现strcat,函数命名为
my_strcat

#include<stdio.h>#include<assert.h>char*my_strcat(char* dest,constchar* scr){assert(dest);assert(scr);char* start = dest;while(*dest !='\0'){
        dest++;//先将目标指针遍历到'\0'的位置上}while(*dest++=*scr++){;}return start;}intmain(){char arr1[20]="hello ";char arr2[]="world!";printf("%s\n",my_strcat(arr1, arr2));return0;}

显示结果:
在这里插入图片描述

四、strcmp

strcmp-Concatenate strings.即比较两个字符串。函数参数为 const char str1* 和 const char str2*,函数返回类型为 int。如下图所示:
在这里插入图片描述
标准规定:

  1. str1>str2,返回值>0
  2. str1==str2,返回值=0
  3. str1<str2,返回值<0

下面将模拟实现strcmp,函数命名为my_strcmp

#include<stdio.h>#include<assert.h>intmy_strcmp(constchar* str1,constchar* str2){assert(str1);assert(str2);while(*str1 ==*str2){if(*str1 !='\0')//两个字符串对应元素相等并都不为'\0'时,遍历这个字符串{
            str1++;
            str2++;}elsereturn0;//此为直到两个字符串结束都相等,所以返回0}return*str1 -*str2;//不相等时返回两个字符串对应元素的差值即可判断大小。}intmain(){char arr1[]="abc";char arr2[]="abcd";int ret =my_strcmp(arr1, arr2);if(ret >0){printf("arr1>arr2\n");}elseif(ret <0){printf("arr1<arr2\n");}elseprintf("arr1==arr2\n");return0;}

显示结果:
在这里插入图片描述

标签: c语言 经验分享

本文转载自: https://blog.csdn.net/yishaobai/article/details/126839912
版权归原作者 烛九_阴 所有, 如有侵权,请联系我们删除。

“C语言简易模拟字符串函数(strlen、strcpy、strcat、strcmp)”的评论:

还没有评论