面试题: 字符串转整型 终结者

随着代码手感增强, 想为这个问题写个终结者系列. 缅怀下曾经的自己.

我们审视下这个问题, 整数字符串转成整数. 那么意味着有效字符仅有 “+-0123456789”.

其中整数常见有 short, int , long, long long 等对吧. 大部分人会写成 string convert int.

这里存在一个潜在模糊知识是, C 标准规定 sizeof(long long) >= sizeof (long) >= sizeof(int) >= sizeof(short).

但没有明说具体多大, 这就意味着不同平台实现上可以自由发挥. 例如 sizeof (long) 多数 linux 平台是 8, window 是 4.

所以这里不写那么复杂. 简单点 string convet int32.

因此写题目开始可以和对方一块交流探讨下. 有了 string convert int32 经验加一些平台分支宏搞出 string convert int 也容易.

那我们开始吧.

相关素材 : https://github.com/wangzhione/temp/blob/master/code/offer1/67_string_int.c#L17-L75

整体代码分两部分实现 str2int32 和 assert 单元测试 .单元测试怎么强调都不为过, 这是成为高手必经之路.

其中实现围绕核心思路是下面这些数学知识.

实现层面没有借助 long 来判断越界, 当然这种做法前头已经说了, 存在潜在问题, 不推荐.

这类数据转换函数很多是跨学科, 对于普通工程师而言有点吃力, 感谢相关科学家或专业人士铸就了今天的基础.

希望以上思路能终结这个面试题. 欢迎大家补充更优更完备解法.

Original: https://www.cnblogs.com/life2refuel/p/15981687.html
Author: 喜欢兰花山丘
Title: 面试题: 字符串转整型 终结者

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590621/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 2018年最新JAVA面试题总结之框架(4)

    转自于:https://zhuanlan.zhihu.com/p/40098726 1、谈谈对spring框架的了解 ,spring有什么作用(IOC,AOP),spring的核心…

    数据库 2023年6月16日
    078
  • day02-用户登录功能实现

    多用户即时通讯系统02 4.编码实现01 4.1功能实现-用户登录 4.1.1功能说明 因为还没有学习数据库,我们人为规定 用户名/id = 100,密码为 123456 就可以登…

    数据库 2023年6月11日
    089
  • Spring源码分析-BeanFactoryPostProcessor

    Spring源码分析-BeanFactoryPostProcessor 博主技术有限,本文难免有错误的地方,如果您发现了欢迎评论私信指出,谢谢JAVA技术交流群:737698533…

    数据库 2023年6月16日
    089
  • MySQL学习(3)—MySQL常用命令

    ps:此随笔基于mysql 5.7.*版本。 准备 net start mysql 启动MySQL服务 net stop mysql 关闭MySQL服务 mysql [-h exi…

    数据库 2023年5月24日
    068
  • JWT+SpringSecurity登录和权限管理

    一、什么是JWT 说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别…

    数据库 2023年6月6日
    086
  • 使用MySQL,SQL_MODE有哪些坑,你知道么?

    SQL_MODE是MySQL中的一个系统变量(variable),可由多个MODE组成,每个MODE控制一种行为,如是否允许除数为0,日期中是否允许’0000-00-0…

    数据库 2023年6月11日
    076
  • Exception Handling Considered Harmful

    Do, or do not. There is no try. — Yoda, The Empire Strikes Back(George Lucas) Recent progr…

    数据库 2023年6月9日
    082
  • Spark学习(4) Spark Streaming

    Apache Flink SparkSteaming Storm 架构介于spark和storm之间,主从结构与sparkStreaming相似,DataFlow Grpah与st…

    数据库 2023年6月16日
    073
  • leetcode 144. Binary Tree Preorder Traversal 二叉树展开为链表(中等)

    一、题目大意 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root = [1,null,2,3]输出:[1,2,3] 示例 2: 输入:root…

    数据库 2023年6月16日
    073
  • 第十章 对象的生命周期

    1.什么是生命周期 对象创建 存活 销毁的完整的过程 2.为什么学习对象的生命周期 在以前通过new创建对象,调用对象,则该对象存活,直到被JVM的垃圾回收机制回收 现在由Spri…

    数据库 2023年6月14日
    075
  • 2021年想做的最后挣扎

    一年的时间转眼间就过完,感觉没变,又感觉跟一年前的今天变化还是蛮多的,树立个小目标争取年前完成把 读书一本书看一篇文章: 《百年孤独》:我总感觉虽然是只单身狗是孤单的,理解不了孤独…

    数据库 2023年6月6日
    067
  • MySQL中的触发器

    1.定义: 触发器和存储过程相似,都是嵌入到 MySQL 中的一段程序。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会激活触发器来执行相应的操作。这些事件称为触发条件,…

    数据库 2023年6月16日
    0101
  • 04-MySQL锁

    数据库锁 1、SQL语言包括那几个部分 SQL语言包括 数据定义(DDL)、数据操纵(DML)、数据控制(DCL)和数据查询(DQL)四个部分 2、每部分都有哪些操作关键词 数据定…

    数据库 2023年6月16日
    071
  • Redis学习

    Redis 因为没有指定配置文件 需配置 redis-server redis.windows.conf 之后自动启动 测试性能 redis-benchmark -p 6379 -…

    数据库 2023年6月16日
    068
  • 牛客SQL刷题第三趴——SQL大厂面试真题

    结果,保留了两位小数,并根据播放进度以相反的顺序进行排序。 [En] As a result, two decimal places are retained and sorted…

    数据库 2023年5月24日
    0109
  • python threading args参数报错must be an iterable, not int,解决方法

    错误代码: thread.append(threading.Thread(target=as_same_time, args=(0))) 分析: 因为as_same_time方法只…

    数据库 2023年6月11日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球