一大波库函数的模拟实现

#include<stdio.h>
#include<assert.h>

//指针streln
//int my_strlen(const char *src)
//{
//	int count = 0;
//	while (*src++)
//		count++;
//	return count;
//}

//数组strlen
//int my_strlen(const char src[])
//{
//	int count = 0;
//	while (src[count])
//		count++;
//	return count;
//}

//递归strlen
int my_strlen(const char *src)
{
	if (‘\0‘ == *src)
		return 0;
	else
		return my_strlen(++src) + 1;
}

char *my_strstr(const char *dest, const char *src)
{
	assert(dest);
	assert(src);
	char *pdest = dest,*s1=NULL,*s2=NULL;
	if (!*src)
		return dest;
	while (*pdest)
	{
		s1 = pdest;
		s2 = src;
		while (*s1 && *s2 && !(*s1 - *s2))
			s1++, s2++;
		if (!*s2)
			return pdest;
		pdest++;
	}
	return NULL;
}

char *my_strcpy(char *dest,const char *src)
{
	assert(dest);
	assert(src);
	const char *pdest = dest;
	while (*src)
	{
		if (‘\0‘ == *dest)
			return pdest;
		*dest++ = *src++;
	}
	return pdest;
}

char *my_strcat(char *dest, char *src)
{
	assert(dest);
	assert(src);
	char *psrc = src;
	while (*src)
		src++;
	while (*dest)
		*src++ = *dest++;
	*src = ‘\0‘;
	return psrc;
}

int my_strcmp(const char *dest, const char *src)
{
	assert(dest);
	assert(src);
	while (*dest && *src && !(*src - *dest))
		dest++,src++;
	return (*src - *dest);
}

void *my_memcpy(void *dest, const void *src,size_t len)
{
	assert(dest);
	assert(src);
	char *pdest = (char *)dest;
	char *psrc = (char *)src;
	while (len--)
	{
		*pdest = *psrc;
		pdest++, psrc++;
	}
	return (char *)dest;
}

void *my_memmove(void *dest, void *src, size_t count)
{
	assert(dest);
	assert(src);
	char *pdest = (char *)dest;
	char *psrc = (char *)src;
	if (pdest <= psrc || pdest >= (psrc+count))//防止dest的头部和src的尾部接触的情况进入循环(判断需要正向拷贝)
	{
			while (count--)
			{
				*pdest = *psrc;
				pdest++, psrc++;
			}
	}
	else//只有dest的头部和src的尾部接触才需要倒序拷贝
	{
		pdest = (char *)dest + count;
		psrc = (char *)src + count;
		while (count--)
		{
			*pdest = *psrc;
			*pdest--, *psrc--;
		}
	}
	return (char *)dest;
}

int main()
{
	char arr[20] = "123456789";
	char arr2[] = "456";
	char arr3[20] = "000000000";
	char arr4[] = "87654321";
	char arr5[] = "123456889";
	char arr6[20] = { 1, 2, 3, 4, 5 };
	char arr7[20] = { 0 };
	printf("len=%d,loc=%p\n", my_strlen(arr),my_strstr(arr,arr2));
	printf("%d\n", my_strcmp(arr5, arr));
	printf(my_strcpy(arr3, arr));
	printf("\n");
	printf(my_strcat(arr4, arr));
	printf("\n");
	my_memcpy(arr7, arr6,20);
	my_memmove(arr7, arr6, 12);
	system("pause");
	return 0;
}
时间: 2024-10-26 22:51:13

一大波库函数的模拟实现的相关文章

一大波Java来袭(五)——Java集合概述

把"Java集合"比作是容器,可以把多个对象(实际:是对象的引用),扔在容器中. JDK1.5之前,被丢进集合中的对象,会丢失起数据类型.默认为Object类型 JDK1.5之后,不会丢失数据类型,因为引入了"泛型"(作为下文重点) 本文将结合数据结构,重点讲述Java的4种集合体系的功能和用法,并给出不同应用场景改如何选择? 一.同样是用于"存储数据",既可以使用"数组",有可以使用"集合",有什么区别吗

融资晚报:一大波创业公司获得融资

融资晚报:一大波创业公司获得融资 2015-03-16 25 公众小额捐赠平台路人甲完成200万天使融资,“路人甲”由友成基金会孵化,是北京汇涓时代网络科技有限公司旗下产品.路人甲亦是在猎云投融资对接平台挂牌的创业项目.路人甲之后可能会沉淀 积分系统等新的方式,近期会联合各个公益组织,结合阶段性热点,组织各类主题活动,将大量的零散存量捐赠人导入“路人甲”,形成核心用户群体. 3D虚拟试衣系统量体试衣获得来自浙商创投的天使投资,投资数额未透露.量体试衣亦是去年底在猎云投融资对接平台上挂牌的创业项目

一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对比

本文主要介绍String类.StringBuffer类.StringBuilder类的区别  : 一.概述 (一)String 字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象. (二)StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同. 区别在于StringBuffer每个方法中前面添加了"synchronized",保证其是线程安全的. (三)StringBuilder 字符串可变量,

一大波Java来袭(二)异常处理

概要解析: 本章的知识点可以记为:1图+5关键字+先逮小的.后逮大的  一.基础 (一)定义 1.异常 是指在程序运行的时候发生的一些异常事件.良好的程序设计应该在异常发生的时候提供处理异常的方法,使得程序不会因为异常的发生而中断.因此Java提供的用于处理程序中错误的一种机制. 2.抛出异常throw java程序的执行过程中如出现异常事件,可以生成一个异常类对象(封装了异常事件的信息),被提交给java运行时系统. 简单理解为:推卸责任.马路上遇到了交通事故,不需要自己处理,而是拨打110,

一大波Java来袭(三)Java常用类

本文简单介绍集中Java常用类 不同种类的工具用于处理不同的工作.比如:厨房中的工具用于烹饪:农场中的工具用于养殖--对于Java的学习中处理不同的工作也要采用不同的工具.如:处理数学函数问题用Math类.针对文件的操作采用File类--这也充分体现了Java面向对象的特点 一.字符串类(重点理解内存模型) (一)String Java.lang.String字符串常量,具有不可变性. (二)StringBuffer Java.lang.StringBuffer字符串可变量,是线程安全的. (三

万网知您所需,“域”众不同--.link/.love/.help等一大波新顶级域来袭!

万网在新顶级域市场再次发力,一大波域名界的小鲜肉新鲜上线,价格优惠,限时低至9元起,更有丰富的可注册资源. 一下,即刻世界,用记录生活,用观看世界, 用和做最好的! 新上线的个性化新顶级域价格如下: 限时优惠,猛戳抢购

一大波资源来袭:工具,源码,职场攻略

又要一年了,不要再做个傻傻的程序员,然后不停的问:为什么技术好.工作认真却还败给那些不如自己的人,觉得很是不公平, No No No,你还修炼的不够,不过听Dev的刘说移动应用开发者要涨工资啦,有木有很幸福的赶脚,还有人说由于科技人才短缺,美国放松了留美毕业生工作政策,但也有其它报道称美国技术类绿卡申请越来越难,奥巴马新宣布的移民新政也不利于留学生的发展,这到底是怎么回事呢?难道在美国的留学生会回来抢国内旭元的饭碗,还是去看看是不是真得吧. 对了,刚才说到修炼不够,我是来送福利的,给你的一大波资

圣诞来了咋能没福利,瞧一瞧、一大波

来,先俗一个,时光荏苒,转眼又一年将要过去,圣诞元旦双节来临之际,小编送上一大波福利. 还是说点现实的吧,哪个对你有用记下来,赚福利.  一.腾讯应用宝携手肯德基"圣诞送壕礼"    壕礼:免费全家桶,数百万微信红包和单反相机等.    活动时间:12月20日-12月29日8:00-24:00 从12月20日开始,在遍布全国4500家肯德基店中,顾客可以轻易发现颜色艳丽的"红包'壕'礼"易拉宝.安卓手机用户在只要按照提示,通过腾讯应用宝下载肯德基客户端后就能在APP

福利!双十一期间,一大波免费公开课来袭!!

双十一,除了剁手买买买,还有什么福利 学院为爱学习的孩纸们准备一场双十一饕餮大餐 从2号-11号,一大波免费直播公开课来袭!!!学习走起来,快快挑选您中意的场子,加入直播QQ群吧,每晚8:00-9:30,直播准时开始! Q群席位有限,来晚了站票都没了啊!! 51CTO学院双十一期间免费直播公开课 时间 课程链接 讲师 名称 QQ群 加群超链接 11.02 http://edu.51cto.com/course/11229.html 刘浩洋 项目管理PMP实战应用 617561547 https: