strlen -求字符串长度
size_t strlen(const char* str)
1,字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')
2.参数指向的字符串必须要以'\0'结束
int main()
{
char arr[] = { 'a', 'b', 'c' };
int len = strlen(arr);
printf("%d\n", len);//15
return 0;
}
3.注意函数的返回值size_t是无符号的
size_t=unsigned int
int main()
{ 3-6=-3 3.6两个无符号数相减得到的是无符号数 =3 hehe
if (strlen("abc") - strlen("abcdef"))
{
printf("hehe\n");//hehe
}
else
{
printf("haha\n");
}
return 0;
}
模拟实现strlen的时候返回值写int还是unsigned int?
写int,因为求的字符串长度肯定是一个整数
写成unsigned int有歧义 比如(strlen("abc") - strlen("abcdef")=3
模拟实现strlen
1.计数器(创建了临时变量count)
int my_strlen(const char* str)
{
int count = 0;
assert(str != NULL);
while (*str)//(*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
int len = my_strlen("abc");
printf("%d\n", len);
return 0;
}
2.递归(不创建临时变量)
int my_strlen(const char* str)
{
assert(str != NULL);
if (*str != '\0')
{
return 1 + my_strlen(str + 1);
//my_strlen("bit");
//1+my_strlen("it");
//1+1+my_strlen("t");
//1+1+1+my_strlen("");
//1+1+1+0
//3
}
else
return 0;
}
int main()
{
int len = my_strlen("abc");
printf("%d\n", len);
return 0;
}
3.指针-指针
int my_strlen(const char* str)
{
assert(str != NULL);
char* start = str;
char* end = str;
while (*end!='\0')
{
end++;
}
return end - start;
}
int main()
{
int len = my_strlen("abc");
printf("%d\n", len);
return 0;
}