前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【c语言】字符串函数的模拟实现(一)

【c语言】字符串函数的模拟实现(一)

作者头像
用户11029269
发布2024-03-19 17:55:51
770
发布2024-03-19 17:55:51
举报
字符串函数模拟实现

  • strlen介绍及实现
  • strcpy介绍及实现

strlen介绍及实现

strlen的作用是求字符串长度。因为字符串的结束标志是'\0',所以strlen统计的是'\0'之前出现的字符的个数。另外我们还需要注意的是strlen函数的返回类型是size_t类型,即无符号整形,那我们看一下下面这一段代码:

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>

int main()
{
     if(strlen("abc") - strlen("abcdef") > 0)
         printf(">\n");
     else
         printf("<=\n");
     return 0;
}

看到这一段代码有人肯定会说3 - 6 < 0屏幕上会打印<=,事实上打印的是>。因为strlen返回的是无符号数,而两个无符号数相减的结果类型也应该是一个size_t类无符号数。所以两数相减的结果-3会被当成一个无符号数,则就大于0了。

综上所述,我们在模拟实现strlen函数时,必须注意以下几点:

  1. 要正确获取到字符串长度的话,那么字符串中必须有'\0'
  2. 要注意strlen的返回类型为size_t

方法一:

代码语言:javascript
复制
#include<stdio.h>

size_t my_strlen(const char* str)
{
     size_t count=0; //计数器,统计字符串长度
     assert(str != NULL);
     while(*str != '\0')
     {
          count++;
          str++;
     }
     return count;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法二: 指针 - 指针----->地址 - 地址 :得到的的是指针和指针之间的元素的个数:

代码语言:javascript
复制
#include<stdio.h>

size_t my_strlen(const char* str)
{
     assert(p != NULL);
     char* cur=str;
     while(*cur != '\0')
     {
          cur++;
     }
     return cur - str;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法三: 递归方式(不创建临时变量)

代码语言:javascript
复制
#include<stdio.h>

size_t my_strlen(const char* str)
{
     if(*str != '\0')
         return 1+my_strlen(str+1);
     else
         return 0;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

strcpy介绍及实现

strcpy函数就是将一个字符串拷贝到另一个字符串中的函数,在拷贝字符串时也会将字符串的结束标志'\0'也拷贝进去。这里的destination指的是目标字符串,即我们要拷贝字符串进去的字符串。source指的是源字符串,即需要拷贝的字符串,因为这个源字符是不需要修改的,所以为了避免错误我们就用const修饰。 此函数的返回值是一个char*指针,指向了拷贝后的字符串。

通过上面的介绍我们在模拟实现strcpy函数时需要注意以下几点:

  1. 源字符串必须包含'\0',同时'\0'也会被拷贝到目标空间。
  2. 要保证目标空间足够大,能放下拷贝来的数据
  3. 保证目标空间可以修改
代码语言:javascript
复制
#include<stdio.h>
#include<assert.h> 

void my_strcpy(char* dest,const char* src)
{
    assert(dest && src);
    while(*dest++ = *src++)
    {
        ;
    }
}
int main()
{
    char arr1[]="abcdef";
    char arr2[20]={0};
    my_strcpy(arr1,arr2);
    return 0;
}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符串函数模拟实现
  • strlen介绍及实现
  • strcpy介绍及实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档