模拟实现strlen
#include<stdio.h>
size_t my_strlen(const char* arr)
{
size_t s = 0;
while (*arr)
{
arr++;
s++;
}
return s;
}
int main()
{
char arr[] = "hello,world!";
printf("%zu", my_strlen(arr));
return 0;
}
模拟实现strcpy
void my_strcpy(char * dest,const char * src)
{
while (*dest++ = *src++)
{
;
}
}
int main()
{
char arr1[] = "hello,world!";
char arr2[20] = { 0 };
my_strcpy(arr2, arr1);
printf("%s", arr2);
return 0;
}
模拟实现strcmp
int my_strcmp(const char *arc1, const char* arc2)
{
while ((*arc1) &&((*arc1) == (*arc2)))
{
arc1++;
arc2++;
}
return (unsigned char)(*arc1) - (unsigned char)(*arc2);
}
int main()
{
char arr1[] = "applE";
char arr2[] = "apple";
int r = my_strcmp(arr1, arr2);
if (r > 0)
printf("arr1>arr2");
else if(r==0)
printf("arr1=arr2");
else
printf("arr1<arr2");
return 0;
}
模拟实现strcat
void my_strcat(char *dest,const char * src)
{
while (*dest)
{
dest++;
}
while (*dest = *src)
{
dest++;
src++;
}
}
int main()
{
char arr1[20] = "hello";
char arr2[20] = "world";
my_strcat(arr1, arr2);
printf("%s", arr1);
return 0;
}
模拟实现strstr
const char * my_strstr(const char * arr1,const char * arr2)
{
const char* a1 = arr1;
const char* a2 = arr2;
if (*arr2 == '\0')
return arr1;
while (*a1)
{
const char* begin = a1;
while (*begin && *a2&&(*begin ==*a2))
{
begin++;
a2++;
}
if (*a2 == '\0')
return a1;
a2 = arr2;
a1++;
}
return NULL;
}
int main()
{
char arr1[] = "abcabcabcd";
char arr2[] = "abcabcd";
const char * ret =my_strstr(arr1, arr2);
if (ret == NULL)
printf("no found");
else printf("found:%s", ret);
return 0;
}
模拟实现strncpy
void my_strncpy(char *dest,const char * src,size_t num)
{
while((num)&&(*src))
{
*dest = *src;
dest++;
src++;
num--;
}
while (num > 0)
{
*dest = '\0';
dest++;
num--;
}
}
int main()
{
char arr1[20] = "hello";
char arr2[20] = "world";
my_strncpy(arr1, arr2, 2);
printf("%s", arr1);
return 0;
}
模拟实现strncat
void my_strncat(char* dest, const char* src, size_t num)
{
while (*dest)
{
dest++;
}
while (num && *src)
{
*dest = *src;
dest++;
src++;
num--;
}
*dest = '\0';
}
int main()
{
char arr1[20] = "hello";
char arr2[20] = "world";
my_strncat(arr1, arr2, 3);
printf("%s", arr1);
return 0;
}
模拟实现memcpy
void my_memcpy(void * dest,void * src,size_t num)
{
while (num&&(*(char*)src))
{
*(char*)dest = *(char*)src;
((char*)dest)++;
((char*)src)++;
num--;
}
if (num == 0)
*(char*)dest = '\0';
}
int main()
{
char src[] = "123456789";
char dest[10] = { 0 };
my_memcpy(dest, src, 7);
printf("%s", dest);
return 0;
}
模拟实现memmove
void my_memmove(char* dest, char* src, size_t num)
{
if (src >= dest)
{
while (num)
{
*dest = *src;
dest++;
src++;
num--;
}
}
else
{
while (num)
{
*(dest + num-1) = *(src + num-1);
num--;
}
}
}
int main()
{
char arr[20] = "123456789";
/*my_memmove(arr+2, arr+3, 3);
printf("%s\n", arr);*/
//124566789
my_memmove(arr + 3, arr + 2, 3);
//123345789
printf("%s\n", arr);
return 0;
}
1322

被折叠的 条评论
为什么被折叠?



