#define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
#include <stdlib.h>
#include<string.h>
1.实现strcpy
char *my_strcpy( char*dest, const char*src)
{
char*ret = dest;
assert(dest&&src);
while (*dest++ =*src++)
{
;
}
return ret;
}
int main()
{
char a[50] = {};
printf("enter s string:\n");
//scanf("%s", &a);
printf("string is %s\n", my_strcpy (a,"hahahahaha"));
system("pause");
return 0;
}
2.实现strcat
char*my_strcat(char*dest, const char*src)
{
char *ret = dest;
assert(dest&&src);
while (*dest)
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char a[] = "nimen";
char b[] = "haoya";
printf("string is: %s \n", my_strcat(a,b));
system("pause");
return 0;
}
3.实现strstr
char *my_strstr(const char* str1, char* str2)
{
assert(str1&&str2);
char *cp = (char*)str1;
char *substr = (char*)str2;
char *s1 = NULL;
if (*str2 == '\0')
return NULL;
while (*cp)
{
s1 = cp;
substr = str2;
while (*s1 && *substr && (*s1 == *substr))
{
s1++;
substr++;
}
if (*substr == '\0')
return cp;
cp++;
}
}
int main()
{
char a[] = "nimenhaoya";
char b[] = "haoya";
printf("%s\n", my_strstr(a, b));
system("pause");
return 0;
}
4.实现strchr
char*my_strchr( char* str, char c)
{
assert(str);
char* ret =str;
if (*str == '\0')
return NULL;
while (*str++)
{
if (*str == 'c')
return str-1;
}
}
int main()
{
char arr[] = "abcbdeef";
char c = 'b';
printf("%s\n", my_strchr(arr, c));
system("pause");
return 0;
}
5.实现strcmp
int my_strcmp(const char* str1, const char* str2)
{
int ret = 0;
// assert(str1&&str2);
while (!(ret = *(int *)str1 - *(int*)str2) && *str2)
str1++, str2++;
if (ret < 0)
ret = -1;
else if (ret = 0)
ret = 0;
else if(ret>0)
ret = 1;
return ret;
}
int main()
{
char arr1[] = "nimenhaoya";
char arr2[] = "nimenhaoyy";
printf("%d\n", my_strcmp(arr1, arr2));
system("pause");
return 0;
}
6.实现memcpy
void *my_memcpy(void *dest, const void *src, size_t n)
{
void *ret = dest;
assert(dest&&src);
while (n--)
{
*(char*)dest =*(char*)src;
dest=(char*)dest+1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
char arr1[50] = "";
char arr2[50] = "abcdefgh";
int n = 0;
printf("enter copy length: ");
scanf(" %d" ,&n);
printf("%s\n",my_memcpy(arr1,arr2,n));
system("pause");
return 0;
}
7.实现memmove
void *memmove(void* dest, const void* src, size_t count)
{
assert(dest&&src);
void *ret = dest;
if (dest <= src || (char*)dest >= ((char*)src + count))//后向前复制
{
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else{
dest = (char*)dest + count - 1;//前向后翻译
src = (char*)src + count - 1;
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest -1;
src = (char*)src -1;
}
}
return ret;
}
int main()
{
int n = 0;
char arr1[20] ;
char arr2[] = "abcdefgh";
printf("enter copy number :");
scanf("%d", &n);
printf("string is %s\n", memmove(arr1,arr2,n));
system("pause");
return 0;
}