点击蓝字关注我哦

以下是本期干货视频视频后还附有文字版本哦

▼《腾讯经典考点-写代码实现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;}

作者:周荣审核:王海斌编辑:文艺

点个在看,点亮"offer"

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

  1. 重复订单号校验_吊打面试官系列重复消费、顺序消费、分布式事务

    你知道的越多,你不知道的越多 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难. 作为一个在互联网公司面一次拿一次Of ...

  2. qt定时器是阻塞的吗_吊打面试官 | 面试官:TCP真的可靠吗

    点击蓝字关注我哦 以下是本期干货视频视频后还附有文字版本哦 ▼<面试官:TCP真的可靠吗>▼ ps:请在WiFi环境下打开,如果有钱任性请随意 TCP真的可靠吗 面试官经常会问的一个问题是 ...

  3. 如何查找历史线程阻塞原因_吊打面试官!Java多线程并发 108 道题,你能答对多少?...

    多线程并发108题 1.Java中实现多线程有几种方法 2.继承Thread 类 3.实现Runnable 接口. 4.ExecutorService. Callable. Future 有返回值线程 ...

  4. redis 亿级查询速度_吊打面试官系列:Redis 性能优化的 13 条军规大全

    我的官方群点击此处. 1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效 ...

  5. vb6 判断打印机是否有效_吊打面试官 | 算法之如何判断括号是否有效?

    今天要讲的这道题是 bilibili 今年的笔试真题,也是一道关于栈的经典面试题. 经过前面文章的学习,我想很多朋友已经看出来了,我接下来要写的是一个关于「算法图解」的系列文章,中间可能会穿插少量的其 ...

  6. c调用其他类的方法_吊打面试官-类加载器

    1. 什么是类加载器? 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在 ...

  7. mabatisplus怎么给实体类自定义属性_吊打面试官之:当实体类中的属性名和表中的字段名不一样 ,怎么办 ?...

    第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致. <select id="selectorder" parametertype=&qu ...

  8. ❤️手撕这十道HiveSQL题还不能吊打面试官,却能保你不被吊打❤️【推荐收藏】

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HiveSQL十题 第一题 1.需求 2.数据准备 3. ...

  9. mysql 触发器条件判断偶尔失效_mysql┃多个角度说明sql优化,让你吊打面试官!...

    ​正文约: 4744字 预计阅读时间: 12分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 mysql┃多个角度说明sql优化,让你吊打面试官! 目录 目录 前言 正文 1.表结构优化● ...

最新文章

  1. OpenStack平台功能性测试工具Tempest安装
  2. 2017全球大数据产业八领域典型公司盘点分析
  3. mv 重命名或移动文件
  4. 怎样在不处理的情况下在ABBYY FineReader中添加图像
  5. 【错误记录】Android Studio 编译报错 ( Error:Connection timed out: connect | 更新配置依赖仓库方式 )
  6. 错误 SQL TOP子句中的行数必须是整数
  7. Spark RDD并行度与分区设置
  8. android 按钮吐司,Android控件系列之Toast使用介绍
  9. 两种方式解决 生产者消费者问题
  10. superset可视化-world map
  11. codeforces1440 D. Graph Subset Problem
  12. react-redux笔记
  13. 国内人气设计师交流平台集设
  14. 实现WP7下ListBox分页加载接口
  15. JRebel-JVMTI [FATAL] Couldn‘t write to C:\Users\【完美解决方案】
  16. html标签中的lang属性
  17. vue提交表单数据到后端
  18. Linux系统简介分区基础命令(ADMIN01-2)
  19. linux sdb空间转移,Linux系统sda变sdb的解决
  20. java与go对接AES-GCM加解密

热门文章

  1. Leet Code OJ 258. Add Digits [Difficulty: Easy]
  2. cas 单点登录_47 使用cas完成单点登录-02 搭建cas client完成单点登录
  3. 容器学习 之 容器的概念(一)
  4. BeanUtils.copyProperties()使用详解+在不同包的区别
  5. 为什么重写HashCode()和equal()
  6. Web前端开发笔记——第四章 JavaScript程序设计 第二节 变量
  7. docker 分布式 lnmp 镜像制作
  8. jxl生成表格(合并单元格,字体,样式)
  9. python psutil库安装_安装psutil模块报错安装python-devel
  10. springcloud 子项目怎么导入_「 从0到1学习微服务SpringCloud 」09 补充篇-maven父子模块项目...