【C语言 strlen函数、strcpy函数 、strcat函数 、strcmp函数 、strstr函数 、strncpy函数 、strncat函数 、memcpy函数 、memmove函数模拟实现】

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;

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值