strlen函数
#include <stdio.h>
size_t my_strlen(const char* str)
{
int count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
int main()
{
char* s = "abcdefgh";
size_t len = 0;
len = my_strlen(s);
printf("%s,len=%d\n", s, len);
return 0;
}
strcpy函数
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* destination, const char* source)
{
char* ret = destination;
assert(destination && source);
while (*source != '\0')
{
*destination = *source;
destination++;
source++;
}
*destination = *source;
return ret;
}
int main()
{
char s1[] = "hello bit";
char s2[20] = { 0 };
my_strcpy(s2, s1);
printf("%s\n", s2);
return 0;
}
strcat函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* begin = dest;
//第一步、寻找目标字符串中的\0
while (*dest)
{
dest++;
}
//第二步、追加源字符串并包含\0
while (*dest++ = *src++)
{
;
}
return begin;
}
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
printf("%s", my_strcat(arr1, arr2));
}
strcmp函数
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
while ((*str1 == *str2) && (*str1 != '\0'))
{
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char* str1 = "ef";
char* str2 = "efa";
int ret = 0;
ret = my_strcmp(str1, str2);
printf("%d\n", ret);
system("pause");
return 0;
}
strstr函数
#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strstr(const char* dis, const char* src)
{
assert(dis && src);
char* A = (char*)src;
char* B = (char*)dis;
char* C = (char*)dis;
while (*(char*)C)
{
*(char*)B = *(char*)C;
while (*dis != '\0' && *src != '\0' && (*(char*)A == *(char*)B))
{
(char*)A++;
(char*)B++;
}
if (*(char*)A == '\0')
{
return C;
}
*(char*)A = *(char*)src;
C++;
}
}
int main()
{
char arr1[] = "abcdassasa";
char arr2[] = "sa";
printf("%s\n", my_strstr(arr1, arr2));
return 0;
}
strncpy函数
#include<stdio.h>
char* my_strncpy(char* dest, const char* src, size_t count)
{
char* start = dest;
while (count && (*dest++ = *src++))
{
count--;
}
if (count)
{
while (--count)
{
*dest++ = '\0';
}
}
return start;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
my_strncpy(arr1, arr2, 6);
printf("%s\n", arr1);
return 0;
}
strncat函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* mystrncat(char* destination, const char* source, size_t num)
{
if (destination == NULL)
return NULL;
if (source == NULL)
return destination;
char* dest = destination + strlen(destination);
for (size_t i = 0; i < num; i++)
{
*(dest++) = *(source++);
}
*dest = '\0';
return destination;
}
int main() {
char dest[1024] = "I am ";
const char source[] = "a student!";
if (dest != NULL && *source != '\0')
printf("%s\n", mystrncat(dest, source, strlen(source)));
system("pause");
return 0;
}
memcpy函数
#include <stdio.h>
#include <string.h>
#include <assert.h>
void my_memcpy(void* dest, const void* src, size_t sz)
{
assert(dest && src);
while (sz--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
int main()
{
int arr1[10] = { 0 };
int arr2[] = { 1,2,3,4,5 };
my_memcpy(arr1, arr2, 20);//20 == 4*5
for (int i = 0; i < 5; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
memmove函数
#include <stdio.h>
#include <assert.h>
void* my_memmove(void* dest, const void* src, size_t sz)
{
assert(dest && src);
char* ret = (char*)dest;
if (dest < src)
{
while (sz--)
{
*((char*)dest) = *((char*)src);
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
while (sz--)
{
*((char*)dest + sz) = *((char*)src + sz);
}
}
return ret;
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
my_memmove(arr + 2, arr, 20);//20 == 4*5
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}