随着代码手感增强, 想为这个问题写个终结者系列. 缅怀下曾经的自己.
我们审视下这个问题, 整数字符串转成整数. 那么意味着有效字符仅有 “+-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/
转载文章受原作者版权保护。转载请注明原作者出处!