一、计数器方法
由于字符串长度不可能是负数,所以可以用size_t(无符号整型)来作为函数的输出值。
由于只是计算字符串长度而不想改变字符串的内容,可以加上const修饰指针str使得指针str指向的内容不能被修改。
由于指针str解引用的时候不能为空指针,所以可以加一个assert(str)来保证指针有效。
#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
assert(str);
size_t count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
循环判断地址str,若地址不为’\0’,则计数器count+1,地址str+1判断下一个字符。
当str为’\0’,循环结束。
二、指针-指针
指针-指针输出的是两个指针之间的元素的个数
#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
assert(str);
char* end = str;
while (*end != '\0')
{
end++;
}
return end - str;
}
循环找到字符串’\0’的地址,再和首字符地址相减即可。
三、递归
#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
assert(str);
if (*str != '\0')//递归的判断条件
{
return 1 + my_strlen(++str);
}
else
{
return 0;
}
}