题目描述
请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
提示:
本题中的空白字符只包括空格字符 ’ ’ 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
输入: “42”
输出: 42
示例 2:
输入: " -42"
输出: -42
解释: 第一个非空白字符为 ‘-’, 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:
输入: “4193 with words”
输出: 4193
解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。
示例 4:
输入: “words and 987”
输出: 0
解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。
因此无法执行有效的转换。
示例 5:
输入: “-91283472332”
输出: -2147483648
解释: 数字 “-91283472332” 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。

leetcode链接:https://leetcode-cn.com/problems/string-to-integer-atoi

题意分析
1、字符串转整数,因此,要用到以下的步骤:

string str = {'12345678'};
int num,;
int ans = 0;
for(int i = 0;i < str.length(); i++){nums = str[i] - '0';ans = ans * 10 + nums;
}

2、考虑边界情况

1、假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
2、 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231)

3、实现代码(这里使用的是C++,在必要的地方代码中有注释)

class Solution {public:int myAtoi(string str) {const char *p = str.c_str(); // char* 形式传回 string 内含字符串for(; p != nullptr && *p == ' '; p++) {}  // 去除字符串中的“ ”if(p == nullptr || (*p != '+' && *p != '-' && (*p < '0' || *p > '9'))) {     //判断首个输入的字符是不是数字或者‘+’ ‘-’return 0;}int res = 0, flag = 1;    //使用flag 作为正负的标记if(*p == '-') {flag = -1;p++;} else if(*p == '+') {p++;}int MAX = (((1 << 30)-1)<<1) + 1;   //使用位运算表示最大值 和最小值 int MIN = -MAX-1;for(; '0' <= *p && *p <= '9'; p++) {if((MAX-(*p-'0')) / 10 < res) {   // 如果直接用res *10 + *p-'0' > MAX 判断,会导致越界,程序无法运行,所以进行转换if(flag == -1) {return MIN;} else {return MAX;}}(res *= 10) += *p-'0';}return res * flag;}
};

Leetcode错题本1-实现一个 atoi 函数,使其能将字符串转换成整数。相关推荐

  1. 如何把一个字符串转换成整数

    剑指offer第一章的例子,据说是微软的面试题,发现自己又躺枪了.字符串处理有多烦人不用我多说了吧. //基础版代码 int StrToInt(char* string) {int number = ...

  2. 程序员面试题精选100题(17)-把字符串转换成整数[算法]

    题目:输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345. 分析:这道题尽管不是很难,学过C/C++语言一般都能实现基本功能,但不同程 ...

  3. 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...

    点击专辑上方"蓝字"关注我吧 题目难度: 中等 原题链接[1] 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ ...

  4. leetcode —— 面试题67. 把字符串转换成整数

    写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到 ...

  5. 把字符串转换成整数(atoi)

    题目 描述 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数.传入的字符串可能有以下部分组成: 1.若干空格 2.(可选)一个符号字符('+' 或 ...

  6. 【LeetCode】剑指 Offer 67. 把字符串转换成整数

    [LeetCode]剑指 Offer 67. 把字符串转换成整数 文章目录 [LeetCode]剑指 Offer 67. 把字符串转换成整数 package offer;public class So ...

  7. 【每日一题】字符串转换成整数

    题目来源 牛客网 链接:字符串转换成整数 题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0. 输入描述: 输入一个字符串,包括数 ...

  8. 编程题:将字符串转换成整数 C++实现

    First:按照题目要求将一个字符串转换成一个整数,首先忽略掉前面的"+""-"后,主要的逻辑就是将字符串 中的元素一个一个拿出来转换成整数然后循环乘10后进行 ...

  9. 算法题:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串“12345”,则输出整数“12345”

    今天这道算法题比较简单,主要考察的思考问题的全面性.这个需要考虑的几种情况. 如果输入的整数字符串是个负数,怎么处理? 如果输入的第一个字符是0,则怎么处理? 如果输入的是非0~9之间的字符怎么处理? ...

最新文章

  1. Log4j官方文档翻译(一、基本介绍)
  2. 如何拓展外链引流,让网站成为“顶牛”?
  3. Catch Overflow!
  4. 大型项目中会出现的一些问题:
  5. server 2008R2 AD域环境中DHCP服务器的授权步骤
  6. php利用引用实现树形数组
  7. 招商银行王龙:金融科技银行数据架构设计的13条守则(含PPT)
  8. [ACM] hdu 1285 确定比赛 (拓扑排序)
  9. java容器分数0-9_2018.4.27 java容器
  10. shell学习之突发奇想 ^_^ 打印9*9乘法表
  11. 网页上的html表格导出excel表格,网页表格导出至Excel
  12. Glide 加载圆形图片
  13. 优锘科技:渲染引擎T3D:WebGL端数字孪生应用最优解
  14. 【铁矿石期货怎么开通】11月22日午盘基本面资讯整理
  15. 开发必备的最高100个 Flutter 开源精品项目
  16. Linux 小程序开发日记(终章)(pyqt+yolov5)
  17. 【生成模型】浅析玻尔兹曼机的原理和实践
  18. 浅析产品新手引导设计
  19. 阈值法matlab程序,遗传算法优化BP神经网络权值和阈值的通用MATLAB源码
  20. C#面向对象Chatbot智能版

热门文章

  1. SQLServer 数据修复命令DBCC一览
  2. Salesforce Admin管理员中文学习教程,如何高效筛选出具有Admin权限的用户!
  3. 网站被CC攻击怎么办
  4. P6到P7只用了两年,阅码无数的阿里开发,是如何去阅读别人代码的?
  5. 接种甲流疫苗导致疫情暴发是谣言
  6. python 字符串时间转成时间戳
  7. CSS3第6章上机练习2
  8. 如何打开路由器的配置界面
  9. 服务器装m2硬盘,IBM X3650M2服务器安装windows2008R2系统
  10. DNS解析全过程及原理