strlen()计算字符串的长度(不包括\0)
strlen的使用
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "World!";
int len = strlen(str);
printf("字符串的长度为:%d\n", len);
return 0;
}
仿写strlen()的三种方法
1、常规写法
int my_strlen(const char* str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char str[20] = "abcdef";
int ret = my_strlen(str);
printf("%d\n",ret);
return 0;
}
使用 while 循环遍历字符串,直到遇到字符串结束符 '\0' 。
在循环中,通过指针移动和计数器增加来计算字符串的长度。
最后返回计数器的值作为字符串的长度。
2、指针-指针 (指针减去指针)
//指针-指针
int my_strlen(const char* str)//起始 结束
{
const char* start = str;
assert(str != NULL);
while (*str != '\0')
{
str++;
}
return str - start;
}
int main()
{
char str[20] = "abcdef";
int ret = my_strlen(str);
printf("%d\n",ret);
return 0;
}
这里 用了指针相减的方法来计算字符串的长度。
首先记录字符串的起始地址 start ,然后通过指针移动找到字符串的结束位置。
最后返回结束位置指针减去起始位置指针的值,即为字符串的长度。
3、递归
int my_strlen(const char* str)
{
assert(str != NULL);
//while(*str != '\0')//用递归就不需要用while了
if (*str != '\0')
return 1 + my_strlen(str+1);//第一次的str+1是从第二个字符开始
else
return 0;
}
int main()
{
char str[20] = "abcdef";
int ret = my_strlen(str);
printf("%d\n", ret);
return 0;
}
递归的终止条件是遇到字符串结束符 '\0' 。
每次递归调用时,将字符串指针向后移动一位,并将长度加 1 。
最终返回字符串的长度。
总结:
第一段代码使用循环遍历字符串,第二段代码使用指针相减,第三段代码使用递归。
可以根据具体需求选择合适的方法。在实际应用中,需要注意字符串的合法性和边界条件,以确保程序的正确性。