面试中总会遇到实现类似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;
}
然后看到一种面试填空题:
int strlen(char * str)
{
}
哎呀,怎么不能使用中间变量,好吧,这只能是用递归了:
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);
}