题目:
现在写一个函数StrToInt,实现把字符串转换为整数的功能,不能使用已有的相关函数。
分析:
要考虑到非法的输入,比如空字符串“”和只有一个正号或负号的情况。同时整数的最大值为0x7FFFFFFF,最小值为0x80000000。
代码:
enum Status {kValid = 0,kInvalid };
int g_nStatus = kValid ; //全局变量,用来判断非法输入0
int
StrToInt(const
char* str)
{
g_nStatus =
kInvalid ;
long
long
num
= 0;
if
(str!=
NULL && *str!='\0')
{
bool
minus = false;
if(*str
== '+')
str++;
else
if(*str == '-')
{
str++;
minus
= true;
}
if(*str
!= '\0')
num
= StrToIntCore(str, minus);
}
}
long
long
StrToIntCore(const char* digit,bool minus)
{
long
long num = 0;
while
(*digit
!= '\0')
{
if
(*digit
>='0' && *digit<='9')
{
int
flag = minus ? -1 : 1;
num
= num * 10 + flag *(*digit - '0'
);
if((!minus && num >0x7FFFFFFF )||(minus && num < 0x80000000))
//溢出判断
{
num = 0;
break;
}
digit++;
}
else
{
num = 0;
break;
}
}
if
(*digit=='\0'
)
g_nStatus
= kValid;
return
num ;
}