这个问题的难点在于能否把边界条件考虑齐全:
一:开始时遇到空格时如何处理 //如 1234565dafsgdgg
二:在开始时有很多0如何处理 // 000001341asdfgg
三:在最前面遇到+-号怎么处理,在输出时如何处理 // +13454fdggfgf,-123435
四:当转换的整数越界了怎么处理// 134253678976543245678543
五:当遇到非数字字符时如何处理 //#&* aerty1345
六:为空串时如何处理(str == NULL)
typedef long long INT_64;
int StrToInt(char *str)
{
static INT_64 MAX = (INT_64)((unsigned)~0 >> 1);
static INT_64 MIX = -(INT_64)((unsigned)~0 >> 1) - 1;
long long num = 0;
if (str == NULL)
{
return 0;
}
//空格
while (isspace(*str))
++str;
int sign = 1;
if (*str == '+' || *str == '-')
{
if (*str == '-')
{
sign = -1;
}
++str;
}
while (isdigit(*str))
{
int c = *str - '0';
if ((sign > 0) && ((num > MAX / 10) || ((num == MAX) && (c >= MAX % 10))))
{
num = MAX;
return num;
}
else if ((sign < 0) && ((num > MAX / 10) || ((num == MAX/10) && (c >= MAX % 10))))
{
num = MIX;
return num;
}
num = num * 10 + c;
++str;
}
if (sign > 0)
return num;
return -num;
}