首页 > 试题广场 >

把字符串转换成整数

[编程题]把字符串转换成整数
  • 热度指数:507911 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0

数据范围:字符串长度满足
进阶:空间复杂度 ,时间复杂度

注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。

输入描述:
输入一个字符串,包括数字字母符号,可以为空


输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1

输入

"+2147483647"

输出

2147483647
示例2

输入

"1a33"

输出

0
头像 蒙牛麦片
发表于 2021-06-24 09:36:24
精华题解 JZ49 把字符串转换成整数 题意分析: 将给的合法字符串转化为整数 示例输入:"+2147483647"返回:2147483647 示例输入:"1a33" 返回值:0。输入是不合法的,因此结果是0 题解一(枚举各种情况): 在字符串的开头,可能有如下几种情况 展开全文
头像 牛客题解官
发表于 2020-06-01 16:41:26
精华题解 描述 这是一篇针对初学者的题解。题解针对atoi()的实现,不限于本题。知识点:字符串,边界考察难度:二星 题解 题目意思很明确,这道题难就难在边界的考察。如果对于一般规则的数字“字符串”转化为数字都很容易,比如:对于“123456”可以利用如下代码进行转化: int ans = 0; for ( 展开全文
头像 鸠摩罗什
发表于 2021-07-11 11:57:53
精华题解 描述        将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:      &nbs 展开全文
头像 漫漫云天自翱翔
发表于 2021-06-20 21:07:56
精华题解 题解一:模拟解题思路:模拟考虑各种特殊情况:1、负号“-”与正号“+”只能出现在第一个i=0的位置;2、不能出现除0~9与+、-之外的任何字符;3、不能出现前置零;4、最后结果判断是否越界(INT_MIN<=res<=INT_MAX);特判所有的特殊情况后,如示例将字符串转换成整数: 展开全文
头像 凉风起天末
发表于 2019-09-16 23:48:03
越界的简单解决方案:让符号位参与运算,并合理利用 INT_MAX/10 众所周知,这道题逻辑并不复杂,只是要判断结果是否出界却有点让人手忙脚乱,这里给出以下两种情景的解决方案(若有发现缺漏之处,望及时指出纠正!): 能够处理最小负数:-2147483648 判断是否超出最小负数 ~ 最大正数的范围 展开全文
头像 pmzcc
发表于 2019-12-23 17:17:05
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。 //看了一些题解,折腾了半天,热门题解中很大一部分判断溢出都是错的,通过率也是85%. //总结一下java的三种解法 解法1:捕捉异常(有些钻空子嫌疑,但是很好用。。。。在题解中看 展开全文
头像 Ironxin
发表于 2020-04-20 22:50:06
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 比如+2147483647,就是有效的2147483647。而1a33就是无效的,因为有个a。  这道题对跨行过来的不太友好,需要一些编码的基础知识,就很难受。而且本题的边界需要 展开全文
头像 郭家兴0624
发表于 2019-08-12 09:58:37
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达 展开全文
头像 牛客825789185号
发表于 2021-10-08 21:33:18
/*首先,这个题不考虑字母*/ /*那就简单多了,只考虑数字,遇到其他情况直接返回-1就行了*/ class Solution { public: int StrToInt(string str) { int ans = 0;int isplus = 1; f 展开全文
头像 常喝水
发表于 2019-12-30 15:24:43
要考虑到的情况: 空字符串 正负号 溢出(最大的正整数值是0x7FFF FFFF,最小的负整数是0x8000 0000) 但是python和c/c++/java不同,后者里面的负数都是以补码的形式进行存储的,python中的负数自带符号。所以要注意是-0x80000000 <= sum*l 展开全文
头像 我不会数据结构
发表于 2019-12-04 17:07:28
本题的逻辑很简单,挡住大部分人success的是较多的边界情况: 首先需要判断str是否为空 其次需要考虑到str是否有正负符号,这里我使用一个boolean变量isNeg表示,方便最后进行返回值的变换 中间我使用Character.isDig 展开全文
头像 李可乐,
发表于 2020-03-11 16:03:44
如何处理溢出情况是本题的难点,通过举一个例子来表达关键代码处的思路。 如果问题背景变成如下:正确的数字范围是-128~127,待分析字符串是-134和129。 1. 重新设置边界。当待分析字符串为负数时 limit = -128; 当待分析字符串为正数时 limit = -12 展开全文
头像 fingertip_jump
发表于 2021-09-21 20:51:52
就简单的模拟,并没有题解说的数据溢出等问题。利用ASIC码求解。 //ASIC码:数字0是48,char型比int型数字大48 public class Solution { public int StrToInt(String str) { char[] ch=str.to 展开全文
头像 编程真好玩
发表于 2021-04-21 18:12:44
public int StrToInt(String str) {     if(str.length() == 0 || str == null | 展开全文