评论

收藏

[C++] 模拟实现strlen()的三种方法

编程语言 编程语言 发布于:2021-12-25 22:50 | 阅读数:323 | 评论:0

在MSDN上查到了strlen()函数的定义:
size_t strlen( const char *string );
<string.h>
Get the length of a string.
意为处于头文件<string.h>里的检测字符串长度的一个函数,且括号里为常变量指针。
在引用strlen()的原型函数如下:
#include<stdio.h>
#include<string.h>
void reserve_string(char* arr)//写成char arr[]也行;
{
int left = 0;
int right = strlen(arr) - 1;
while (left < right)
{
  int tmp = arr[left];
  arr[left] = arr[right];
  arr[right] = tmp;
  left++;
  right--;
}
}
int main()
{
char arr[] = "abcdefg";
reserve_string(arr);
printf("%s\n", arr);
return 0;
}


在不引用头文件的情况下我有一下三种写法能够模拟实现:
一、计数器实现
#include<stdio.h>
int my_strlen(char arr[])//char* arr也行;
{
int count=0;
while(*arr)
{
arr++;
count++;
}
return count;
}
int main()
{
char arr[]="abcdef";
int ret=0;
ret=my_strlen(arr);
printf("%d\n",ret);
return 0;
}
二、递归实现
​#include<stdio.h>
int my_strlen(const char* str)​//不希望str的值被改变,加一个const;
{
if(*str!='\0')
{
return 1+my_strlen(str+1);
}
else
{
return 0;
}
}
int main()
{
char arr[]="abcdef";
printf("%d\n", my_strlen(arr));
return 0;
}


三、指针减指针
​#include<stdio.h>
int my_strlen(const char* arr)
{
char* dak=arr;//将元素首元素地址存起来(指针初始位置);
assert(arr!=NULL);//保证指针的有效性;
while(*arr)
{
arr++;
}
return arr-dak;
}
int main()
{
char arr[]="abcdef";
int ret=0;
ret=my_strlen(arr);
printf("%d\n",ret);
return 0;
}


关注下面的标签,发现更多相似文章