我自己写的atoi(). 字符串转整型.

来源:互联网 发布:淘宝线下体验店 编辑:程序博客网 时间:2024/05/24 06:24
我自己写的atoi(). 字符串转整型.
enum ErrCode{Err_OK,Err_InvalidParam,Err_Overflow,Err_Underflow,};ErrCode myAtoI(const char* pch, int&result){// param checking.if (NULL == pch)return Err_InvalidParam;const char *p = pch;// signal checking.bool isNegative = false;if ('-' == *p){isNegative = true;p++;}else if ('+' == *p)p++;// If isNegative, uMax should be 1 bigger than INT_MAX (=abs(INT_MIN)).// because abs(INT_MIN) is 1 bigger than abs(INT_MAX).unsigned int uMax = (unsigned int)INT_MAX;if (isNegative)uMax++;// loop check each char.unsigned int uSum = 0;while (('\0' != *p) && (*p >= '0') && (*p <= '9')){// overflow or underflow checkingif ((uSum > uMax/10) ||((uSum == uMax/10) && ((unsigned int)((*p)-'0') > uMax - uSum*10))){result = (isNegative)? INT_MIN: INT_MAX;return (isNegative)? Err_Underflow: Err_Underflow;}// calculate the sumuSum = ((uSum*10u) + (*p) - '0');p++;}result = (isNegative? -1: 1) * (int)uSum;return Err_OK;}

原创粉丝点击