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

本文介绍了一个不使用内置函数的手动实现字符串到整数的转换方法,包括处理正负号、溢出判断等细节。

题目:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值