stelen函数的实现
1.计数器实现
即遍历字符串,直到遇到’\0’为止
size_t my_strlen(const char* str)
{
size_t count = 0;
assert(str);
while (*str != '\0')
{
count++;
str++;
}
return count;
}
2.指针实现
c语言中,指针-指针得到的是两个指针之间的元素个数,我们可以将起始地址储存在临时指针变量中,然后遍历字符串直到遇到’\0’为止,那此时的地址减去起始地址,将值返回即可
//2.指针-指针
size_t my_strlen(const char* str)
{
const char* end = str;
while (*end != '\0')
{
end++;
}
return end - str;
}
3.递归实现
在遇到’\0’之前就反复地调用,将每一次调用的值加起来
//3.递归
size_t my_strlen(const char* str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
主函数
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%u\n", n);
return 0;
}
strcmp函数的模拟实现
如果两个字符串相等返回0,其他情况返回两者之差即可,因为字符在计算机的储存是ASCII。
int my_strcmp(const char* str1, const char* str2)
{
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return (*str1 - *str2);
}
int main()
{
char arr1[20] = "abc";
char arr2[] = "abc";
//两个字符串比较相等用strcmp函数
int ret = my_strcmp(arr1, arr2);
if (ret < 0)
printf("<\n");
else if (ret == 0)
printf("==\n");
else
printf("<\n");
//比较一下两个字符串是否相等
//if (arr1 == arr2)
//{
// printf("==\n");
//}
//else
//{
// printf("!=\n");
//}
return 0;
}
strcat函数字符串追加
原理是找到目标字符串的\0处,将另以字符串内容赋值到其中,我们可以利用指针,然后++。
//字符串追加
char* my_strcat(char* dest, const char* src)
{
assert(dest&&src);
char* str = dest;
//1.找到目标空间的末尾\0
while (*dest != '\0')
{
dest++;
}
//2.拷贝末尾字符串
while (*dest++ = *src++)
{
;
}
return str;
}
int main()
{
char arr1[20] = "hello ";
//my_strcat(arr1, "world");
//自己给自己追加?
my_strcat(arr1,arr1);
//1.目标空间足够大
//2.目标空间可修改
//3.原字符串有\0
printf("%s\n", arr1);
//char arr1[] = "abcdef";
//char arr2[20] = { 0 };
//my_strcpy(arr2, arr1);
//printf("%s\n", arr2);//abcdef
return 0;
}