字符串转换整数 (atoi)

一个小更新.

今天仔细的研究了一下int型越界的情况, 顺便把力扣的一道题做了.

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
  6. 返回整数作为最终结果。

int型的表示范围是[−231,231−1][-2^{31}, 2^{31}-1][−231,231−1], 也就是 [−2147483648,2147483647][-2147483648, 2147483647][−2147483648,2147483647]. 在字符串转整数的过程里, 我的顺序是先确定符号, 再一位一位地判断是不是数字, 判断是否越界, 更新已有的结果. 也就是说, 我判断越界时是考虑的数值部分, 只要数值超过2147483647在我的计算过程里就认为越界. 这时候可能会考虑如果是-2147483648呢? 它并没有越界啊. 实际上是没有影响的. 在我的判断条件里它数值部分越界了, 但符号为负, 低于下界的会截断到-2147483648, 虽然不是同一个变量, 但是同一个数值.

下面附上C++代码. 如果是python的话, 越界的处理会简单很多.

class Solution {
public:int myAtoi(string s) {int len = s.size();int idx = 0;while (idx < len && s[idx] == ' '){idx++;}int sign = 1;if (s[idx] == '-'|| s[idx] == '+'){if (s[idx] == '-'){sign = -1;}idx++;}int result = 0;int num = 0;while (idx < len){num = s[idx] - '0';if (num > 9 || num < 0){break;}if (result > 214748364 || (result == 214748364 && num > 7)){if (sign == -1){return -2147483648;}else{return 2147483647;}}else{result = result * 10 + num;}idx++;}return sign*result;}
};

C++字符串转换整数 (atoi)相关推荐

  1. c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)

    " 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法.主要内容如下: 题目 示例 解题 " 01 - 题目 请你来实现一个 atoi 函数,使其能将字符 ...

  2. LeetCode8. 字符串转换整数 (atoi)

    LeetCode8. 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...

  3. [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)

    [DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...

  4. 力扣——字符串转换整数 (atoi)

    字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(st ...

  5. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  6. 8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)

    8. 字符串转换整数 (atoi): 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAto ...

  7. 8. 字符串转换整数 (atoi)(正则表达式)

    字符串转换整数--C, Python实现 1. 问题描述与分析 2. C语言实现 3. Python实现 3.1 普通判断法 3.2 正则表达式法 1. 问题描述与分析 问题描述: 问题分析: 该算法 ...

  8. 20190822:(leetcode习题)字符串转换整数 (atoi)

    字符串转换整数 题目 大致思路 代码实现 题目 大致思路 这题主要是乱,思路大家都很容易想,就是把各种情况给码出来就行了,大家见我的代码注释会比较清晰. 几个用得到的方法:trim和substring ...

  9. 字符串转换整数 (atoi)

    题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...

最新文章

  1. R语言笔记2:读写数据所需的主要函数、与外部环境交互
  2. X window的思想和终端的重大意义
  3. [LeetCode]Perfect Squares
  4. PythonOpenCV - 随机生成图像 与 图像的转维(reshape)
  5. c语言 程序循环,C语言程序设计-循环例子
  6. 有关sed命令的用法
  7. [转载] Python input()函数
  8. db2数据库基础知识
  9. 系统辨识与自适应控制matlab仿真下载,系统辨识与自适应控制MATLAB仿真 全部程序...
  10. CRC校验关键点说明(内附C语言CRC校验库)
  11. RPLIDAR的坐标系问题
  12. 工业相机视场和分辨率计算
  13. 电脑重装win10系统bios不会设置?用这种方法可以轻松重装系统
  14. Python通过MQTT协议上传物联网数据给ThingsBoard
  15. 监控之美——监控之美-监控系统选型分析及误区探讨
  16. loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...
  17. mac上使用使用rz,sz命令
  18. 近十年机器人学科中国学者SCI十大发文期刊
  19. 《ExcelxPython智能高效办公》学习记录
  20. android 系统设置向导,详解Android 手机卫士设置向导页面

热门文章

  1. 关于紫光a5扫描仪的安装
  2. c语言如何实现软件抗干扰,单片机软件系统抗干扰设计
  3. agGrid设置对指定行不能选中checkbox
  4. 给wangeditor添加上标、下标功能
  5. Pandas中文教程
  6. Docker进入容器命令
  7. 网站模板建站怎么做?
  8. MySQL事务隔离级别以及实现原理
  9. Mysql进阶学习(七)联合查询与DML语言
  10. 前端开发语言有哪些?需要掌握什么?