//1、找到数字字符或者加减号
//2、计算值时需要保证不溢出,将要溢出时返回最大或最小值
int myatoi(const char *str)
{
if ( NULL == str )
{
printf("error, param is NULL\n");
return 0;
}
int nIndex = 0;
while ( '\0' != *(str + nIndex) )
{
if ( (*(str + nIndex) >= '0' && *(str + nIndex) <= '9')
|| *(str + nIndex) == '-'
|| *(str + nIndex) == '+' )
{
break;
}
++nIndex;
}
if ( '\0' == *(str + nIndex) )
{
printf("warn, there is no dest \n");
return 0;
}
// is negative number ?
bool nFlag = false;
if ( *(str + nIndex) == '-' )
{
nFlag = true;
++nIndex;
}
else if ( *(str + nIndex) == '+' )
{
++nIndex;
}
int nRet = 0;
while ( '\0' != *(str + nIndex) && *(str + nIndex) >= '0' && *(str + nIndex) <= '9' )
{
if ( nRet > INT_MAX / 10 )
{
return INT_MAX;
}
else if ( nRet < INT_MIN / 10 )
{
return INT_MIN;
}
else
{
if ( nRet == INT_MAX / 10 && *(str + nIndex) >= '8' )
{
return INT_MAX;
}
else if ( nRet == INT_MIN / 10 && *(str + nIndex) == '9' )
{
return INT_MIN;
}
}
int temp = *(str + nIndex) - '0';
if ( nFlag )
{
temp *= -1;
}
nRet = nRet*10 + temp;
++nIndex;
}
return nRet;
}