库函数

来源:互联网 发布:刘胜军 知乎 编辑:程序博客网 时间:2024/06/05 19:09
atoiint 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;    }strcpychar * 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;  }