字符串函数:
strlen求字符串长度,strcpy字符串拷贝,strcat字符串追加,strcmp字符串比较,strstr字符串查找字串
内存函数
memcpy内存拷贝,memmove内存拷贝升级
1.strlen函数的模拟实现
int my_strlen(const char* str) {
assert(str); //断言,不能对空串解引用
int ret = 0;
while (*str != ' ') {
ret++;
str++;
}
return ret;
}
int main()
{
char arr[] = "abcdef";
printf("%dn", my_strlen(arr));
return 0;
}
2.strcpy的模拟实现
char* my_strcpy(char* dest, const char* sou) {
assert(dest && sou);
char* ret = dest;
while (*dest++ = *sou++)
;
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
my_strcpy(arr2, arr1);
printf("%sn", arr2);
return 0;
}
3.strcat函数模拟实现
char* my_strcat(char* dest, const char* sou) {
assert(dest && sou);
char* ret = dest;
while (*dest != ' ') {
dest++;
}
while (*dest++ = *sou++)
;
return ret;
}
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
my_strcat(arr1, arr2);
printf("%sn", arr1);
return 0;
}
4.strcmp函数的模拟实现
int my_strcmp(const char* str1, const char* str2) {
assert(str1 && str2);
while (*str1 == *str2) {
if (*str1 == ' ') {
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "abcd";
int ret = my_strcmp(arr1, arr2);
if (ret < 0) {
printf("<");
}
else if (ret == 0) {
printf("==");
}
else {
printf(">");
}
return 0;
}
5.strstr函数的模拟实现
char* my_strstr(const char* str1, const char* str2) {
assert(str1 && str2);
const char* strs1 = str1;
const char* strs2 = str2;
const char* p = str1;
while (*p) {
strs1 = p;
strs2 = str2;
while (*strs1 == *strs2) {
strs1++;
strs2++;
}
if (*strs2 == ' ') {
return p;
}
p++;
}
return NULL;
}
int main()
{
char arr1[] = "woaixuexi";
char arr2[] = "ai";
printf("%sn", my_strstr(arr1, arr2));
return 0;
}
6.memcpy函数的模拟实现
void* my_memcpy(void* dest, void* sou, int num) {
assert(dest && sou);
void* ret = dest;
for (int i = 0; i < num; i++) {
*(char*)dest = *(char*)sou;
dest = (char*)dest + 1;
sou = (char*)sou + 1;
}
return ret;
}
int main()
{
int arr1[] = { 1,2,3,4 };
int arr2[4] = { 0 };
my_memcpy(arr2, arr1, 16);
for (int i = 0; i < 4; i++) {
printf("%d ", arr2[i]);
}
return 0;
}
7.memmove函数的模拟实现
void* my_memmove(void* dest, const void* sou, size_t num) {
assert(dest && sou);
void* ret = dest;
if (dest < sou) {
while (num--) {
*(char*)dest = *(char*)sou;
dest = (char*)dest + 1;
sou = (char*)sou + 1;
}
}
else {
while (num--) {
*((char*)dest + num) = *((char*)sou + num);
}
}
return dest;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memmove(arr1 + 4, arr1 + 3, 20);
for (int i = 0; i < 10; i++) {
printf("%d ", arr1[i]);
}
return 0;
}



