1.三种方式模拟实现strlen函数。
2.模拟实现strcpy
3.模拟实现strcat
4.模拟实现strcmp
5.模拟实现strstr
6.模拟实现memcpy
7.模拟实现memmove
#include<stdio.h>
#include<assert.h>
//1.三种方式模拟实现strlen函数。
void my_strlen1(char* p)
{
int count = 0;
while (*p != '\0')
{
count++;
p++;
}
printf("%d\n", count);
}
void my_strlen2(char* p)
{
char* tmp = p;
while (*p != '\0')
{
p++;
}
printf("%d\n", p - tmp);
}
int my_strlen3(char* p)
{
if (*p == '\0')
{
return 0;
}
else
{
return my_strlen3(++p) + 1;
}
}
//2.模拟实现strcpy
char* my_strcpy(char* dest, const char* src)
{
assert(dest);
assert(src);
char* ret = dest;
while (*dest++ = *src++);
return ret;
}
//3.模拟实现strcat
char* my_strcat(char* dest, const char* src)
{
assert(dest);
assert(src);
char* ret = dest;
while (*dest)
{
dest++;
}
while (*dest++ = *src++);
return ret;
}
//4.模拟实现strcmp
char* my_strcmp(const char* dest, const char* src)
{
assert(dest);
assert(src);
while (*dest == *src)
{
if (*dest == '\0' || *src == '\0')
{
return 0;
}
dest++;
src++;
}
return dest - src;
}
//5.模拟实现strstr
char*my_strstr(const char* str1, const char* str2)
{
assert(str1);
assert(str2);
char* start = str1;
char* substart = str2;
char* cur = str1;
while (*cur)
{
start = cur;
substart = str2;
while (*start && *substart && (*start == *substart))
{
start++;
substart++;
}
if (*substart == '\0')
{
return cur;
}
cur++;
}
return NULL;
}
//6.模拟实现memcpy
void *my_memcpy(void *dest, const void *src, size_t count)
{
void *ret = dest;
while (count--)
{
*(char *)dest = *(char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
return ret;
}
//7.模拟实现memmove
void *my_memmove(void *dest, const void *src, size_t count)
{
void *ret = dest;
if (dest < src)
{
while (count--)
{
*(char *)dest = *(char *)src;
dest = (char *)dest + 1;
src = (char *)src + 1;
}
}
else
{
while (count--)
{
*((char*)dest + count) = *((char*)src + count);
}
}
return ret;
}
int main()
{
char p[] = "abcde";
char q[10];
char p1[20] = "hello ";
char p2[] = "word";
char p3[] = "abbbcdf";
char p4[] = "bcd";
char p5[] = "bcr";
void *dest[] = { 1, 2, 3, 4, 5, 6 };
void *str[] = { 7, 8, 9 };
my_strlen1(p);
my_strlen2(p);
printf("%d\n", my_strlen3(p));
printf("%s\n", my_strcpy(q, p));
printf("%s\n", my_strcat(p1, p2));
printf("%d\n", my_strcmp(p1, p2));
printf("%d\n", my_strcmp(p1, p1));
printf("%d\n", my_strcmp(p2, p1));
printf("%s\n", my_strstr(p3, p4));
printf("%s\n", my_memcpy(p2, p1, 3));
printf("%s\n", my_memmove(p4, p5, 2));
return 0;
}