【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;
}

猜你喜欢

转载自blog.csdn.net/lxf_style/article/details/80457322