算法练习之memmove函数C++实现,atoi,itoa函数实现

<pre name="code" class="cpp">void My_itoa(int Val, char *buf)
{
	const unsigned int Radix = 10;//基数
	unsigned int digital = 0;
	unsigned int u = 0;
	char* pBufTemp = NULL;
	char* pBufPos = NULL;
	char temp;

	pBufTemp = buf;

	//考虑负数
	if (Val<0)
	{
		//考虑int类型的最大负数情况
		if (Val == 0x80000000)
		{
			char *p = "-2147483648";
			for(int i=0;i<12;i++)
			{
				buf[i] = *p++;
			}
			return;
		}
		Val = 0-Val;
		*pBufTemp++ = '-';
	}

	//记录下当前buf指针位置
	pBufPos  = pBufTemp;

	//取余得到每一位的数字
	do 
	{
		digital = Val %Radix;
		Val /=Radix;
		//数字->字符
		*pBufTemp++ = digital+'0';
	} while (Val>0);

	//添加字符串结束符
	*pBufTemp-- = '\0';

	//字符串逆置
	while (pBufPos < pBufTemp)
	{
		temp = *pBufTemp;
		*pBufTemp = *pBufPos;
		*pBufPos = temp;
		pBufTemp--;
		pBufPos++;
	}
	return ;
}



void memory_move(void* pDst,const void* pSrc,size_t size)
{
	//判断是否存在内存重叠
	if (pSrc<pDst && (char*)pSrc + size>pDst)
	{
		char* pDstEnd = (char*)pDst+size-1;
		char* pSrcEnd = (char*)pSrc +size-1;
		while (size--)
		{
			*pDstEnd = *pSrcEnd;
			pDstEnd--;
			pSrcEnd--;
		}
	}
	else
	{
		char* pDstStart = (char*)pDst;
		char* pSrcStart = (char*)pSrc;
		while (size--)
		{
			*pDstStart = *pSrcStart;
			pDstStart++;
			pSrcStart++;
		}
	}
}



#define MAX ((int)0x7FFFFFFF)
#define MIN ((int)0x80000000)

int myatoi(const char * str)
{
    bool negative=false;
    unsigned long result=0;

    if(str==NULL)
        return 0;
    while(*str==' '||*str == '\t')
        str++;
    if(*str=='-')
    {
        negative=true;
        str++;
    }
    else if(*str=='+')
        str++;
    if(*str<'0'||*str>'9')
        return 0;

    while(*str>='0' && *str<='9')
    {
        result=result*10+*str-'0';
        if((negative && result>MAX + 1LL) || (!negative && result>MAX))
        {
            //溢出检测
            return 0;
        }

        str++;
    }
    //负数处理
    if(negative)
        result *= -1;
    return (int)result;
}


你可能感兴趣的:(atoi,C++实现,C++语言,memmove函数,itoa函数)