atoi
int atoi(const char *str) {
// Note: The Solution object is instantiated only once and is reused by each test case.
assert(str!=NULL);
while(isspace(*str)) str++;
int sig=1;
if(*str=='-') sig=-1;
if(*str=='+' || *str=='-') str++;
int num=0;
while(isdigit(*str)){
int digit=*str-'0';
if(INT_MAX/10<num || INT_MAX-digit<num*10)
return sig==-1?INT_MIN:INT_MAX;
num=num*10+digit;
str++;
}
return sig*num;
}
strcpy
char * strcpy( char *strDest, const char *strSrc )
{
if(strDest == strSrc) { return strDest; }
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != '\0' );
return address;
}
//Copies characters between buffers.
//
// 函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。
// 与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束
// memcpy功能和memmove相同,但是memcpy中dest和source中的区域不能重叠,否则会出现未知结果。
//
// 返回值说明:返回指向dest的void *指针
// 附加说明: 指针src和dest所指的内存区域不可重叠
//
void *memcpy(void *dest, const void *src, size_t count)
{
assert( (dest!=NULL)&&(src!=NULL) );
char *tmp_dest = (char*)dest;
char *tmp_src = (char*)src;
while( count--)//不对是否存在重叠区域进行判断
*tmp_dest++ = *tmp_src++;
return dest;
}
//要处理src和dest有重叠的情况,不是从尾巴开始移动就没问题了。
//一种情况是dest小于src有重叠,这个时候要从头开始移动,
//另一种是dest大于src有重叠,这个时候要从尾开始移动。
void *memmove(void *dest, const void *src, unsigned int count)
{
assert(dest != NULL && src != NULL);
char* pdest = (char*) dest;
char* psrc = (char*) src;
//pdest在psrc后面,且两者距离小于count时,从尾部开始移动. 其他情况从头部开始移动
if (pdest > psrc && pdest - psrc < count)
{
while (count--)
{
*(pdest + count) = *(psrc + count);
}
} else
{
while (count--)
{
*pdest++ = *psrc++;
}
}
return dest;
}
库函数
最新推荐文章于 2024-03-21 22:28:58 发布