leetcode:String to Integer (atoi)

本文详细解析了atoi函数的实现逻辑与注意事项,包括去除前导空格、判断正负号、数字识别与转换边界处理等关键步骤。通过具体代码实现,深入理解字符串到整数的转换过程。

Question:

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Requirements for atoi:

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

实现atoi这个函数, public int atoi(String str),传入字符串str可以返回整数,请仔细考虑一下字符串的各种情况,如果你想挑战一下就不要看下边的注意事项。这是一个比较简单的leetcode题。

注意事项:① 这个功能开始要丢弃尽量多的空格直到第一个非空格字符的出现(其实就是去除字符串开头空格),把第一个非空格字符“+”或者“-”当做数字符号处理。

     ② 这个字符串可以在数字后加入字母,要忽略处理。

     ③ 如果第一个非空格字符是字母而不是一个数字符号,或者根本就是空,就不能使用转换功能,返回0。

     ④ 如果正确的结果已经超出了整型数的范围返回INT_MAX (2147483647) 或者INT_MIN (-2147483648) 。

算法设计思想:① 首先,去掉字符串前边空格,并判断字符串是否为空,为空直接就返回0,这里要注意一点判断字符串是否为“”要用equals方法而不是使用==。

                         ② 去除字符串前边空格后,提取第一个字符,判断是否是‘+’或者‘-’,用boolean类型bool做标记,如果正数就是true,负数就是false,设计这个的目的是想让处理的数是绝对值,最后再判断符号。

                         ③ 去除字符串前边的空格,如果第一个字符不是数字,返回0。

                         ④ 对字符串访问,用start和end标记数字,如果遇到非数字,访问结束,用start和end截取数字字符。

                         ⑤ 对截取数字字符做类型转化,判断是否超出了范围,如果超出了范围,返回INT_MAX (2147483647) 或者INT_MIN (-2147483648)。

代码实现(java)

 1 class Solution8 {
 2     public int atoi(String str) {
 3         //str=str.replace(" ", "");//去掉字符串中所有的空格
 4         str=str.trim();//去掉两边空格
 5         if(str.equals("")||str==null)//如果字符串是空或者第一个是字母,则返回0
 6             return 0;
 7         int i=0;            //对字符串遍历,指向字符串的下标
 8         boolean bool=true;  //记录正负数
 9         if(str.charAt(i)=='-') {//判断第一个字符是不是正负号
10             bool=false;
11             i++;
12         }
13         else if(str.charAt(i)=='+'){
14             i++;
15         }
16         if(str.charAt(i)<'0'||str.charAt(i)>'9')//如果非空格字符不是数字返回0
17             return 0;
18         int start=i;//数字开始的下标
19         int end=i;//数字结束的位置
20         for(;i<str.length();){
21             if(str.charAt(i)>='0'&&str.charAt(i)<='9')
22                 i++;
23             else{
24                 end=i;
25                 break;
26             }
27         }
28         if(i==str.length())//如果i==str.length,表明end的值就是字符串的最后一位,但是这时end并不是str.length而是str。length-1
29             end=i;
30         if(Double.valueOf(str.substring(start, end))>Integer.MAX_VALUE){
31             if(bool)
32                 return Integer.MAX_VALUE;  //如果超出范围且为正数返回最大Integer数
33             else
34                 return Integer.MIN_VALUE;//如果超出范围且为负数返回最小Integer数
35         }
36         else{
37             if(bool)
38                 return Integer.valueOf(str.substring(start, end));//返回正数
39             else
40                 return -Integer.valueOf(str.substring(start, end));//返回负数
41         }
42     }
43 }

 

 

 

      

转载于:https://www.cnblogs.com/zhaolizhen/p/atoi.html

## 01、数据介绍 数据整理全国30个省份制造业细分行业产值,能够反映一定时期内细分行业工业生产总规模和总水平的指标,是计算工业生产发展速度和主要比例关系、计算工业产品销售率等其他经济指标的基础。先进制造业数据可用于两业融合测算。 数据名称:全国30省-制造业细分行业产值/先进制造业细分行业产值数据 数据年份:2001-2022年 ## 02、数据指标 农副食品加工业;食品制造业;饮料制造业;烟草制造业;纺织业;纺织服装鞋帽制造业;皮革、毛皮、羽毛(绒)极其制品业;木材加工及木、竹、藤、棕、草制品业;家具制造业;造纸及纸制品业;印刷业和记录媒介的复制;文教体育用品制造业;石油加工、炼焦及核燃料加工业化;学原料及化学制品制造业;医药制造业;化学纤维制造业;橡胶和塑料制品制品业;非金属矿物制品业;黑色金属冶炼及压延加工业;有色金属冶炼及压延加工业;金属制品业;通用设备制造业;专用设备制造业;汽车制造业;其他运输设备制造业;电气机械及器材制造业;通信设备计算机及其他电子设备制造业;仪器仪表及文化、办公用机械制造业;其他制造业;废弃资源和废旧材料回收加工业;制造业总产值 印刷业和记录媒介的复制;石油加工、炼焦及核燃料加工业;化学原料及化学制品制造业;医药制造业;橡胶和塑料制品制品业;非金属矿物制品业;黑色金属冶炼及压延加工业;有色金属冶炼及压延加工业;金属制品业;通用设备制造业;专用设备制造业;汽车制造业;其他运输设备制造业;电气机械及器材制造业;通信设备计算机及其他电子设备制造业;仪器仪表及文化、办公用机械制造业;废弃资源和废旧材料回收加工业
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值