每天学习一点string.h

    面试中总会遇到实现类似strcpy,strlen功能的程序,所以需要注意积累,每天学习一个函数!

    第一天,strcpy:

 

方案一:


char* MyStrcpy(char* strDes, const char* strSrc)
{
	assert((strDes != NULL) && (strSrc != NULL));
	char* Restr = strDes; //返回strDes支持链式表达式
	while((*strDes++ = *strSrc++) != '\0')
		;
	return Restr;
}

方案二:

char* MyStrcpy(char* strDes, const char* strSrc)
{
	assert((strDes != NULL) && (strSrc != NULL));
	char* Restr = strDes;
	int i = 0;
	for(i = 0; strSrc[i] != '\0'; i++)
	{
		strDes[i] = strSrc[i];
	}
	strDes[i] = '\0';
	return Restr;
}
总结:1、源字符串是const限定的; 2、返回的是strDes,为了支持链式表达式:strlen(strcpy(a, b)); 3、注意判断两个字符指针是否为空; 4、记住字符串结尾一定要加'\0'。


明天继续,要持之以恒,加油!

2014.05.10

    第二天,strcat函数

    

char* MyStrcat(char* strDes, const char* strSrc)
{
	assert((strDes != NULL) && (strSrc != NULL));
	char* ReStr = strDes;
	while(*strDes)
		++strDes;
	while((*strDes++ = *strSrc++) != '\0')
		;
	return ReStr;
}


2014.05.11

    第三天,strlen函数

    自己先写了个低端的:

unsigned int MyStrlen(const char* strSrc)
{
	assert(strSrc != NULL);
	unsigned int count = 0;
	while(*strSrc++)
		++count;
	return count;
}


鉴于长度肯定不是负的,所以一定记得是unsigned的!

    然后看到一种面试填空题:

int strlen(char * str)

       if(    )

              return  (      );

       else

              return   (      ) ;

    哎呀,怎么不能使用中间变量,好吧,这只能是用递归了:

unsigned int MyStrlen(const char* strSrc)
{
	assert(strSrc != NULL);
	if(*strSrc == '\0')
		return 0;
	else
		return(MyStrlen(++strSrc) + 1);
}


    最后奉献一下标准版:


unsigned int MyStrlen(const char* strSrc)
{
	assert(strSrc != NULL);
	const char* _first = strSrc;
	while(*strSrc++)
		;
	return(strSrc - _first - 1);
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值