生活匆匆忙忙,钱包尚空,你我仍需努力!
strlen模拟实现
#include<stdio.h>
int my_strlen(const char* arr)
{
int count = 0;
while (*arr++)
{
count++;
}
return count;
}
int main()
{
char arr[] = "abcdefg";
int k = my_strlen(arr);
printf("%d", k);
return 0;
}
strcpy模拟实现
#include<stdio.h>
char* my_strcpy(char* dst, const char* src)
{
char* a = dst;
while (*dst++ = *src++)
{
;
}
return a;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
my_strcpy(arr2, arr1);
printf("%s", arr2);
return 0;
}
strcat模拟实现
#include<stdio.h>
char* my_strcat(char* arr1, const char* arr2)
{
char* a = arr1;
while (*arr1)
{
arr1++;
}
while (*arr1++ = *arr2++)
{
;
}
return a;
}
int main()
{
char arr1[50] = "abcdef";
char arr2[] = "woshishuaige";
my_strcat(arr1, arr2);
printf("%s", arr1);
}
strcmp模拟实现
#include<stdio.h>
int my_strcmp(const char* c1, const char* c2)
{
while (*c1 == *c2)
{
if (*c1 == '\0')
{
return 0;
}
c1++;
c2++;
}
return *c1 - *c2;
}
int main()
{
char a[] = "abcdef";
char b[] = "abcdgh";
printf("%d", my_strcmp(a, b));
}
strstr模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
char* p = str1;
char* s1 = str1;
char* s2 = str2;
while (*p)
{
s1 = p;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return p;
}
p++;
}
return NULL;
}
int main()
{
char a[] = "abbbcdef";
char b[] = "bbc";
char* ret = my_strstr(a, b);
if (ret == NULL)
printf("找不到\n");
else
printf("找到了字符串并且为%s", ret);
return 0;
}
memcpy模拟实现
#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* dest, const void* src,int num)
{
assert(dest && src);
void* a = dest;
while (num--)
{
*((char*)dest) = *((char*)src);
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return a;
}
int main() {
int arr1[] = { 1,2,3,4,5,6,7 };
int arr2[20] = { 0 };
my_memcpy(arr2, arr1, 20);
for (int i = 0; i < 5; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
memmove模拟实现
#include<stdio.h>
#include<assert.h>
void* my_memmove(void* dest, const void* src, int num)
{
assert(dest && src);
void* ret = dest;
if (dest < src)
{
while (num--)
//顺着来
{
*((char*)dest) = *((char*)src);
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
//倒着来
while (num--)
{
*((char*)dest + num) = *((char*)src + num);
}
}
return ret;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7 };
my_memmove(arr + 3, arr, 16);
for (int i = 0; i < 7; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
st + num) = ((char)src + num);
}
}
return ret;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7 };
my_memmove(arr + 3, arr, 16);
for (int i = 0; i < 7; i++)
{
printf("%d ", arr[i]);
}
return 0;
}