atoi函数_吊打面试官 | 腾讯经典考点写代码实现atoi函数

4f6a04ae2af43659e95935407149bc9c.png

点击蓝字关注我哦

1893faf50fb7effe2d19164741912ef3.png 以下是本期干货视频 视频后还附有文字版本哦 cca391232e133bf123884b69f7688afb.png 2ce037d6f93f64b851a2a445b0fc73a3.png

▼《腾讯经典考点-写代码实现atoi函数》▼

ps:请在WiFi环境下打开,如果有钱任性请随意

在腾讯面试时,经常会被问到如何用代码实现atoi函数? 这道题看起来很简单,如果需要实现基本功能,大概10行以内就可以搞定。比如如下代码:
int atoi(char* str){   int number = 0;   while(*str != 0)  {       number = number * 10 + *str - '0';       ++str;  }   return number;   }
但是上面的代码漏洞百出,不是面试官想要的代码。上述代码在遇到特殊情况时,就会产生不靠谱的结果。比如
  • 空指针

  • 正负号

  • 溢出

  • 非法字符

我们在写代码时,需要把这些特殊情况全部考虑进去,才能写出一个让面试官满意的代码。 一个逻辑比较完备的代码如下所示:
int atoi(const char* str){   //给一个比较大的数据类型,方便处理溢出   long long num = 0;   //判断指针是否为空,以及是否有有效字符   if(str != nullptr && *str != '\0')  {       //是否为负数       bool minus = false;       if(*str == '+')           ++str;       else if(*str == '-')      {           ++str;           minus = true;}       if(*str != '\0')      {           num = StrToInt(str, minus);      }  }   return (int) num;}long long StrToInt(const char* str, bool minus){   long long num = 0;   while(*str != '\0')  {       //判断是否为有效字符       if(*str >= '0' && *str <= '9')      {           //判断正负数           int flag = minus ? -1 : 1;           num = num * 10 + flag * (*str - '0');           //判断是否溢出,包括正溢出和负溢出           if((!minus && num > 0x7fffffff)             || (minus && num < (signed int) 0x80000000))          {               num = 0;               break;          }           ++str;      }       else      {           num = 0;           break;      }}   return num;}
作者: 周荣 审核:王海斌 编辑:文艺

5f0db1c4f5b2aef69722500f0b064ff3.png

点个在看,点亮"offer"

effb19ac93ad3931d15f79890b5e55a5.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值