目录
求字符串长度
strlen
1. 函数介绍
size_t strlen(const char *str);
1. 字符串把 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数,不包含 '\0'。
2. 参数指向的字符串必须要以 '\0' 结束。
3. 注意函数的返回值为size_t,是无符号的。
2. 模拟实现
//方法1
size_t my_strlen(const char* p)
{
assert(p);
size_t count = 0;
while (*p != '\0')
{
p++;
count++;
}
return count;
}
//方法2 指针减指针
size_t my_strlen(const char* p)
{
char* cur = p;
while (*cur != '\0') cur++;
return cur - p;
}
//方法3 递归
size_t my_strlen(const char* p)
{
if (*p == '\0') return 0;
return 1 + my_strlen(++p);
}
int main()
{
printf("%d\n", my_strlen("abcc"));
return 0;
}
长度不受限制的字符串函数
strcpy
1. 函数介绍
char* strcpy(char* destination, const char* source);
1. 将 source 所指向的字符串拷贝到 destination 所指向的空间,包括 '\0'。
2. 源字符串必须以 '\0' 结束。
3. 目标空间必须足够大,以确保能存放源字符串。
4. 目标空间必须可修改。
5. 返回目标空间的地址。
2. 模拟实现
char* my_strcpy(char* dst, const char* src)
{
assert(dst && src);
char* sta = dst;
while (*dst++ = *src++);
return sta; //这里不能直接返回dst,因为dst已经加加了
}
int main()
{
char a[] = "xxxxxxxxx";
char b[] = "abcd";
my_strcpy(a, b);
my_strlen(a);
return 0;
}
strcat
1. 函数介绍
char* strcat (char* destination, const char* source);
1. 把源头的数据追加到目的地,返回目的地的地址。
2. 源字符串必须以 '\0' 结束。
3. 目标空间必须有足够的大,能容纳下源字符串的内容。
4. 目标空间必须可修改。
5. 字符串自己给自己追加,如何?不行,永远遇不到 '\0'。
2. 模拟实现
char* my_strcat(char* dst, const char* src)
{
assert(dst && src); //保证指针有效性
char* sta = dst;
while (*dst) dst++;
while (*dst++ = *src++);
return sta;
}
int main()
{
char a[20] = "abcd";
char b[] = "xxx";
printf("%s\n", my_strcat(a, b));
return 0;
}