剑指offer之把字符串转换成整数

来源:互联网 发布:头发少 知乎 编辑:程序博客网 时间:2024/05/22 03:17

题目:

      现在写一个函数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 ;
 }

0 0