模拟实现strlen
#include<stdio.h>
#include<string.h>
int my_strlen(char *arr)
{
int count = 0;
char* pcur = arr;
if (pcur)
{
while (*pcur++ != '\0') count++;
}
return count;
}
int main()
{
char *arr = "hello world";
int ret = my_strlen(arr);
//int ret = strlen(arr);
printf("%d\n", ret);
return 0;
}
模拟实现strcpy
#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strcpy(char *dst, const char *src)
{
char *ret = dst;
assert(dst&&src);
while ((*dst++ = *src++));
return ret;
}
int main()
{
char *arr = "hello world";
char dst[14] = "";
my_strcpy(dst, arr);
printf("%s\n", dst);
return 0;
}
模拟实现strcat
#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strcat(char *dst, const char *src)
{
char *ret = dst;
assert(dst&&src);
while (*dst)
{
dst++;
}
while ((*dst++ = *src++));
return ret;
}
int main()
{
char arr[] = "hello world";
char *dst = " hello bit";
char* ret =my_strcat(arr, dst);
printf("%s\n", ret);
return 0;
}
模拟实现strstr
#include<stdio.h>
#include<assert.h>
#include<string.h>
char *my_strstr(const char* src, const char* dst)
{
assert(src&&dst);
char *pcur1 = (char*)src;
char *pcur2 = (char*)dst;
char *cur = NULL;
if (*dst == '\0')
return NULL;
while (*pcur1)
{
cur = pcur1;
pcur2 = (char *)dst;
while (*cur&&*pcur2 && (*cur == *pcur2))
{
cur++;
pcur2++;
}
if (*pcur2 == '\0')
return pcur1;
pcur1++;
}
}
int main()
{
char arr[] = "casacsdscs";
char *dst = "cs";
char* ret = my_strstr(arr, dst);
printf("%s\n", ret);
return 0;
}
模拟实现strcmp
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* src, const char * dst)
{
int ret = 0;
while (!(ret = *(unsigned char *)src - *(unsigned char*)dst)&&*dst)
{
++src;
++dst;
}
if (ret < 0)
ret = -1;
else if (ret > 0)
ret = 1;
return ret;
}
int main()
{
char arr[] = "cbsacsdscs";
char *dst = "casacsdscs";
int ret = my_strcmp(arr, dst);
printf("%d\n", ret);
return 0;
}
模拟实现memcpy
#include<stdio.h>
#include<assert.h>
void *my_memcpy(void *dst,const void *src, size_t count)
{
void *ret = dst;
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
char dst[10] = "";
char *arr = "casacsdscs";
void* ret = my_memcpy(dst, arr,5);
printf("%s\n", ret);
return 0;
}
模拟实现memmove
#include<stdio.h>
#include<assert.h>
void *my_memmove(void *dst, void *src, size_t count)
{
void *ret = dst;
if (dst <= src || (char*)dst <= (char*)src)//src地址小于dst地址时从头拷贝
{
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
else//
{
dst = (char*)dst + count - 1;
src = (char*)src + count - 1;
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst - 1;
src = (char*)src - 1;
}
}
return ret;
}
#include<stdio.h>
int main()
{
char dst[10] = "";
char arr[20]= "abcdefghij";
printf("%s\n", arr);
void* ret = my_memmove(arr, arr+3, 5);
printf("%s\n", ret);
ret = my_memmove(arr+3, arr, 5);
printf("%s\n", ret);
return 0;
}