模拟实现strlen()的三种方法
在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;
arr = arr;
arr = 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;
}
https://blog.51cto.com/u_15468432/4843712
页:
[1]