C++字符串转换整数 (atoi)
字符串转换整数 (atoi)
一个小更新.
今天仔细的研究了一下int型越界的情况, 顺便把力扣的一道题做了.
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:
- 读入字符串并丢弃无用的前导空格
- 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
- 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
- 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
- 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
- 返回整数作为最终结果。
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)相关推荐
- c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)
" 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法.主要内容如下: 题目 示例 解题 " 01 - 题目 请你来实现一个 atoi 函数,使其能将字符 ...
- LeetCode8. 字符串转换整数 (atoi)
LeetCode8. 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...
- [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)
[DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...
- 力扣——字符串转换整数 (atoi)
字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(st ...
- Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...
- 8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)
8. 字符串转换整数 (atoi): 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAto ...
- 8. 字符串转换整数 (atoi)(正则表达式)
字符串转换整数--C, Python实现 1. 问题描述与分析 2. C语言实现 3. Python实现 3.1 普通判断法 3.2 正则表达式法 1. 问题描述与分析 问题描述: 问题分析: 该算法 ...
- 20190822:(leetcode习题)字符串转换整数 (atoi)
字符串转换整数 题目 大致思路 代码实现 题目 大致思路 这题主要是乱,思路大家都很容易想,就是把各种情况给码出来就行了,大家见我的代码注释会比较清晰. 几个用得到的方法:trim和substring ...
- 字符串转换整数 (atoi)
题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...
最新文章
- R语言笔记2:读写数据所需的主要函数、与外部环境交互
- X window的思想和终端的重大意义
- [LeetCode]Perfect Squares
- PythonOpenCV - 随机生成图像 与 图像的转维(reshape)
- c语言 程序循环,C语言程序设计-循环例子
- 有关sed命令的用法
- [转载] Python input()函数
- db2数据库基础知识
- 系统辨识与自适应控制matlab仿真下载,系统辨识与自适应控制MATLAB仿真 全部程序...
- CRC校验关键点说明(内附C语言CRC校验库)
- RPLIDAR的坐标系问题
- 工业相机视场和分辨率计算
- 电脑重装win10系统bios不会设置?用这种方法可以轻松重装系统
- Python通过MQTT协议上传物联网数据给ThingsBoard
- 监控之美——监控之美-监控系统选型分析及误区探讨
- loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...
- mac上使用使用rz,sz命令
- 近十年机器人学科中国学者SCI十大发文期刊
- 《ExcelxPython智能高效办公》学习记录
- android 系统设置向导,详解Android 手机卫士设置向导页面