首页 > 试题广场 >

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

[编程题]把字符串转换成整数(atoi)
  • 热度指数:59339 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:
1.若干空格
2.(可选)一个符号字符('+' 或 '-')
3. 数字,字母,符号,空格组成的字符串表达式
4. 若干空格

转换算法如下:
1.去掉无用的前导空格
2.第一个非空字符为+或者-号时,作为该整数的正负号,如果没有符号,默认为正数
3.判断整数的有效部分:
3.1 确定符号位之后,与之后面尽可能多的连续数字组合起来成为有效整数数字,如果没有有效的整数部分,那么直接返回0
3.2 将字符串前面的整数部分取出,后面可能会存在存在多余的字符(字母,符号,空格等),这些字符可以被忽略,它们对于函数不应该造成影响
3.3  整数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231的整数应该被调整为 −231 ,大于 231 − 1 的整数应该被调整为 231 − 1
4.去掉无用的后导空格


数据范围:
1.0 <=字符串长度<= 100
2.字符串由英文字母(大写和小写)、数字(0-9)、' '、'+'、'-' 和 '.' 组成


示例1

输入

"82"

输出

82
示例2

输入

"   -12  "

输出

-12

说明

去掉前后的空格,为-12  
示例3

输入

"4396 clearlove"

输出

4396

说明

6后面的字符不属于有效的整数部分,去除,但是返回前面提取的有效部分  
示例4

输入

"clearlove 4396"

输出

0
示例5

输入

"-987654321111"

输出

-2147483648
头像 牛客题解官
发表于 2022-04-25 19:04:41
精华题解 题目的主要信息: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数 值为0或者字符串不是一个合法的数值则返回0 输入字符串包括数字字母符号,可以为空 第一个可能有正负号(可选),若是没有默认正数 要去掉前导空格和数字后续无用的字符 注意处理整数越界 举一反三: 学习完本题的思路你可 展开全文
头像 梦会绽放
发表于 2022-01-26 14:53:13
思路:模拟,注意对题目转换算法的理解即可,理清各种情况 空间复杂度 O(1),时间复杂度 O(n) 代码(JAVA实现) public class Solution { public int StrToInt (String s) { int len=s.length();//给定的字 展开全文
头像 牛客983371096号
发表于 2021-11-15 21:19:52
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # #  # @param s string字符串  # @return int整型 # class Solution: &nb 展开全文
头像 不犹豫不败北
发表于 2022-05-20 17:56:15
正则秒解 /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ function StrToInt( s ) { // write code here 展开全文
头像 多拿好offer_gx
发表于 2021-12-21 15:27:56
首先去除掉首位空格,此时第一个字符有三种情况 首先是-或者+,此时往前进一位,当后面没有字符或者后面字符不是数字时,返回0。将后面的数字字符累加起来。累加过程中需要与Integer.MAX_VALUE或者Integer.MIN_VALUE比较; 后面字符是数字,将后面字符累加起来。累加过程中与In 展开全文
头像 godhands
发表于 2022-02-12 11:01:07
描述 题目描述 就是手写一个atoiatoiatoi函数, 满足一下规则 算法流程: 去掉前面的空格 判断第一个非空字符是什么 找尽可能多的数字位 在INT_MIN - 1 到 INT_MAX之间 题解 解法一 实现思路 其实这个题目就是一个大模拟, 我们只需要按照步骤模拟即可, 这里面会有几个 展开全文
头像 摸鱼学大师
发表于 2021-11-30 12:47:51
题目的主要信息: 自己写一个atoi函数,将字符串转变成int型数字,输入没有任何限制,需要注意以下几点: 去掉全部前导空格 第一个符号是正负号的情况 输入了非数字要直接截断 输入达到了int型表示边界 空串返回0 去掉无用后导空格 方法一:遍历法 具体做法: 用一个index全程记录字符串下标 展开全文
头像 雾里看花花里看雾
发表于 2023-04-07 16:05:39
把字符串转换成整数(atoi):最直观的想法是,从字符串高位向低位遍历,然后逐个取字符串元素,先将字符转换为整型,再利用数位关系将其转换为数值。在纯数字的情况下,当然可以像这样做,但是本题中含有非法字符,且明确说明,在若干空格后,可能会存在符号,接着出现的一连串数字才是转换为数值的重要部分,如果后面 展开全文
头像 clyycl
发表于 2023-10-01 15:19:07
#include <algorithm> #include <cmath> #include <climits> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 展开全文
头像 想去北京的沸羊羊在人才库
发表于 2022-01-01 16:06:04
public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ int StrToInt(st 展开全文
头像 SRM...
发表于 2022-04-18 00:25:39
public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ int StrToInt(st 展开全文

问题信息

上传者:牛客301499号
难度:
74条回答 3264浏览

热门推荐

通过挑战的用户