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

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

我们审视下这个问题, 整数字符串转成整数. 那么意味着有效字符仅有 “+-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)

大家都在看

  • java企业官网源码 自适应响应式 freemarker 静态引擎 模块设计方案

    系统设计: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务…

    数据库 2023年6月6日
    0293
  • mybatisplus不支持sum,但支持这个

    我们知道,要对数据求和,写sql很简单:select sum(exp) from table_name我们在用mybatisplus做求和计算的时候,mybatisplus的Wra…

    数据库 2023年6月9日
    0239
  • MySQL进阶系列:一文详解explain

    explain有何用处呢: 为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 ​ 可以使用explain+SQL语句来模拟优化器执行SQ…

    数据库 2023年5月24日
    0135
  • 1_MySQL

    概念: 数据库是按照数据结构来组织, 存储和管理数据的仓库, 是一个长期存储在计算机内的, 有组织的, 有共享的, 统一管理的数据集合 分类: 网状结构数据库: 美国通用汽车公司I…

    数据库 2023年6月11日
    075
  • 23种设计模式之备忘录模式

    文章目录 概述 备忘录模式的优缺点 备忘录模式的结构和实现 * 模式结构 模式实现 总结 概述 备忘录模式(Memento Pattern) 保存一个对象的某个状态,以便在适当的时…

    数据库 2023年6月6日
    091
  • 分享攒了多年的mssql脚本

    分享攒了多年的mssql脚本 脚本类别包括:备份还原表分区常用函数错误日志定时自动抓取耗时SQL并归档发邮件脚本模块镜像批量脚本数据库收缩数据库损坏数据库账号统计数据库大小性能作业…

    数据库 2023年6月9日
    096
  • JUC学习笔记(三)

    线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析 JUC学习笔记(一)https://www.cnblogs.co…

    数据库 2023年6月6日
    093
  • SpringBoot 实现 excel 全自由导入导出,性能强的离谱,用起来还特优雅

    一、简介 在实际的业务系统开发过程中,操作 Excel 实现数据的导入导出基本上是个非常常见的需求。 之前,我们有介绍一款非常好用的工具:EasyPoi,有读者提出在数据量大的情况…

    数据库 2023年6月14日
    081
  • rsync

    rsync是什么 rsync特性 1)可以镜像保存整个目录树和文件系统。 2)可以很容易做到保持原来文件的权限、时间、软硬连接等。 3)无需特殊权限即可安装。 4)快速:第一次同步…

    数据库 2023年6月14日
    086
  • 多商户商城系统功能拆解31讲-平台端营销-会员充值

    多商户商城系统,也称为B2B2C(BBC)平台电商模式多商家商城系统。可以快速帮助企业搭建类似拼多多/京东/天猫/淘宝的综合商城。 多商户商城系统支持商家入驻加盟,同时满足平台自营…

    数据库 2023年6月14日
    083
  • java面试题总结

    1,集合类面试题 arraylist和linkedlist的区别?底层实现?手写实现?线程安全吗以及原因? hashmap的底层实现?put()执行过程?put null时的执行过…

    数据库 2023年6月11日
    092
  • Socket 编码入门

    很多同行朋友大概率学过 socket 通信相关知识, send, recv, listen, connect, accept 等等组合, 变幻 无穷 … 相关的介绍书籍…

    数据库 2023年6月9日
    072
  • 创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1

    8 月 9 日下午,2022 中关村国际前沿科技创新大赛”中关村银行杯”大数据与云计算领域决赛在北京市门头沟区中关村(京西)人工智能科技园·智能文创园落下了…

    数据库 2023年6月16日
    093
  • [springmvc]从前端获取参数以及显示

    6.接收请求参数以及数据回显 接收普通参数 参数名与前端传递的参数名相同时 前端表单名name=name $Title$ username: 后端收到的参数名String name…

    数据库 2023年6月16日
    0106
  • 【java框架】SpringBoot(10) — SpringBoot巧用 @Async提升API接口并发能力

    1.背景 异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是”异步调用”? “异步调用”对应的是”同步调用&…

    数据库 2023年6月6日
    0118
  • 深入汇编指令理解Java关键字volatile

    volatile是什么 volatile关键字是Java提供的一种轻量级同步机制。它能够保证可见性和有序性,但是不能保证原子性 可见性 对于volatile的可见性,先看看这段代码…

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