目录
该函数的作用是传入字符串首元素地址,返回字符串的长度,因此可以用指针解引用来判断是否到达末尾元素,当指针解引用为0时字符串即到尾部了('/0'为0)
#include<stdio.h>
int my_strlen(const char* str)
{
int count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
int main()
{
char ch[] = "abcd";
printf("%d", my_strlen(ch));
}
该函数的作用是将源头字符串拷贝到目标字符串,需要保证的是,目标字符串的长度要比源头字符串长,否则拷贝不下,函数传入两个字符串的首地址,判断结束条件与strlen函数一致.
void my_strcopy(char* desnation, char* souce)
{
assert(desnation && souce);
while (*souce != '\0')
{
*desnation = *souce;
desnation++;
souce++;
}
}
该函数的作用是比较两个字符串,因此可使用两个分别代表两个字符串首地址的指针来依次判断,如果p1大于p2则返回1,小于返回-1,相等则返回0,值得一提的是,当有一方到达末尾或者两方同时到达末尾时,要另外在循坏外面再进行一次判断.
int my_strcmp(const char* p1, const char* p2)
{
while (*p1 != '\0' && *p2 != '\0')
{
if (*p1 > *p2)
{
return 1;
}
else if (*p1 < *p2)
{
return -1;
}
p1++;
p2++;
}
int k = 0;
k = *p1 - *p2;
if (k == 0)
return 0;
else if (k > 0)
return 1;
else
return -1;
}
该函数的作用是将目标字符串的末尾再加上一个字符串,需要保证目标字符串有足够的长度,且在末尾也要加上'/0'.
char* my_strcat(char *p1,const char *p2)
{
char* ret = p1;
while (*p1 != '\0')
{
p1++;
}
while (*p2 != '\0')
{
*p1 = *p2;
p1++;
p2++;
}
*p1 = *p2;
return ret;
}
该函数的作用是再目标字符串中寻找一个字符串,如果找到了就返回首字符地址,可先用循环找到第一个相同字符,然后创建一个指针记下这个地址,然后再往下进行判断.
char* my_strstr(const char* str1, const char* str2)
{
char* p1 = str1;
while (*p1 != *str2)
{
p1++;
}
char* p3 = p1;
while (*p3 != '\0')
{
char* p4 = p3;
char* p2 = str2;
while (*p2 != '\0')
{
if (*p4 != *p2)
break;
p4++;
p2++;
}
if (*p2 == '\0')
return p3;
p3++;
}
}
该函数作用是将一个字符串的前n个字节拷贝到目标字符串上,返回目标字符串的首地址,此函数可以在两个不同字符串上进行操作,但无法在同一字符串操作.
void* my_memcpy(void* dest, const void* src, size_t n)
{
assert(dest && src);
void* p = dest;
while (n--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return p;
}
void test1()
{
char ch1[] = "xxxxxxxxx";
char ch2[] = "aaaaaaaaa";
my_memcpy(ch1, ch2, 3);
printf("%s", ch1);
}
int main()
{
test1();
}
相当于是memcpy的升级版本,函数功能相同,但此函数可以在同一字符串上进行操作,当目标字符串首地址小于拷贝字符串时,采用从左到右拷贝,反之采用从右向左拷贝.
void* my_memmove(void* dest, const void* src, size_t n)
{
void* p = dest;
if (dest < src)
{
while(n--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
while (n--)
{
*((char*)dest + n) = *((char*)src + n);
}
}
return p;
}
void test2()
{
char arr1[] = "aacbbbb";
my_memmove(arr1, arr1 + 3, 2);
printf("%s", arr1);
}
int main()
{
test2();
}
结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!