【C语言】strlen函数的模拟实现(三种方法详解)

方法一:count计数器

#include<stdio.h>
#include<stdlib.h>
int my_strlen(const char*str)  //const修饰只读变量,防止变量被改
{ 
  int count = 0;                      
  while (*str++)//当*str ='\0'跳出循环,注意*str++ 操作符++优先级高于*操作符 
  {              //*str++改的是指针str,与const修饰str不冲突     
    count++;    
  }
  return count;
}
int main()
{
  char*p = "abcd\0ascd";//遇到'\0'停止计数
  printf("%d",my_strlen(p));//输出结果为4
  system("pause");
  return 0;
}
const修饰指针变量

const char*p、char const*p (保护*p,指针p所指内容不可改)
char*const p(保护p,指针本身不可改,指针指向内容可通过指针被改变)


方法二:通过指针求解

   指向同空间的指针相减等于指针间元素个数
#include<stdio.h>
#include<stdlib.h>
int my_strlen(const char*str)
{
  char*p = str;
  while (*++p)     while (*p)        while (*p++)   //注意3者的写法
  {                 {                 {        
   ;                p++;                ;       
  }                 }                 }
  return p - str;  return p - str;   return p - str-1; 
}
int main()
{
   char*p = "abcd0ascd"; //其中字符0不同于'\0',不会停止计数
   printf("%d",my_strlen(p));//输出结果为9
   system("pause");
   return 0;
}

方法三:通过递归的方法求解

#include<stdio.h>
#include<stdlib.h>
int my_strlen(const char*str)
{
  if(*str=='\0')
  {
   return 0;
  }
  return 1+my_strlen(str+1); //函数递归
  //等价于return 1+ my_strlen(++str);
 //但不能写为1+ my_strlen(str++);后置加加每次调用不会改变str的值
}
int main()
{
  char*p = "a\012d0a\x010"; //\012转义字符(\ddd)\x010转义字符(\xddd)
  printf("%d", my_strlen(p)); // 输出结果为6
  system("pause");
 return 0;
}

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

lxf_style

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值