1.实现strcpy
char * my_strcpy(char *dest, const char *src)
{
assert(dest);
assert(src);
char *ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[] = { 0 };
char arr2[] = "efg";
my_strcpy(arr1,arr2);
printf("%s\n",arr1);
system("pause");
return 0;
}
char *my_strcat(char* dest, const char* src)
{
assert(dest!=NULL);
assert(src!=NULL);
char *ret = dest;
while (*dest)
{
dest++;
}
while ((*dest++ = *src++))
{
;
}
return ret;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "efg";
char* ret=my_strcat(arr1, arr2);
printf("%s\n",ret);
system("pause");
return 0;
}
char* my_strstr(const char *str1, const char *str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
if (*str2 == '\0')
{
return str1;
}
while (*str1)
{
const char *p = str1;
const char *q = str2;
while (*p != '\0'&&*q != '\0' && (*p == *q))
{
p++;
q++;
}
if (*q == '\0')
{
return str1;
}
str1++;
}
return NULL;
}
int main()
{
char arr1[] = "abbbbcd";
char arr2[] = "bbc";
char *ret =my_strstr(arr1, arr2);
printf("%s\n",ret);
system("pause");
return 0;
}
char* my_strchr( char*dest, char src)
{
char *p = dest;
assert(dest != NULL);
while (*p != src)
{
p++;
if (*p == '\0')
{
return NULL;
}
}
return p;
}
int main()
{
char arr1[] = "abcd";
char *ret = my_strchr(arr1, 'c');
printf("%s\n",ret);
system("pause");
return 0;
}
int my_strcmp(const char* dest, const char*src)
{
int ret = 0;
assert(dest != NULL);
assert(src != NULL);
while (*dest == *src)
{
if (*src == '\0')
{
return 0;
}
dest++;
src++;
}
if (*dest > *src)
return 1;
else
return -1;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "acaa";
int ret=my_strcmp(arr1, arr2);
printf("%d\n",ret);
system("pause");
return 0;
}
void *my_memcpy(void *str1, const void *str2, size_t count)
{
assert(str1 != NULL);
assert(str2 != NULL);
void *ret = str1;
while (count)
{
*(char*)str1 = *(char*)str2;
str1 = (char*)str1 + 1;
str2 = (char*)str2 + 1;
count--;
}
return ret;
}
int main()
{
int arr1[9] = { 0 };
int arr2[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
my_memcpy(arr1, arr2, 36);
for (i = 0; i < 9; i++)
{
printf("%d ", arr1[i]);
}
system("pause");
return 0;
}
void *my_memcpy(void *str1, const void *str2, size_t count)
{
assert(str1 != NULL);
assert(str2 != NULL);
void *ret = str1;
if (str1 > str2)
{
while (count)
{
*(char*)str1 = *(char*)str2;
str1 = (char*)str1 + 1;
str2 = (char*)str2 + 1;
count--;
}
}
else
{
while (count)
{
*((char*)str1 + count) = *((char*)str2 + count);
count--;
}
}
return ret;
}
int main()
{
int arr[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
memcpy(arr + 1, arr + 2, 16);
for (i = 0; i < 9; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
int my_strlen(const char*str)
{
int count = 0;
assert(str!=NULL);
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = "abcdefg";
int ret=my_strlen(arr);
printf("%d\n", ret);
system("pause");
return 0;
}