【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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值