字符串转换成整数:输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串”345”,则输出整数345。
在笔试面试中,atoi 即「字符串转换成整数」是一个经典问题了,此题无关算法,考察的更多是编码能力和细节考虑能力。因此自己就动手写了下,写完之后,打开 JDK 的源码想看看大牛是怎么写的,所谓「站在巨人的肩膀上」,果然还是有很多有意思的东西的。
首先,实现的思路是扫描整个字符串,扫描到当前字符时,将之前的结果乘以10加上当前字符代表的数字。
思路是很简单,但是有很多细节需要考虑,也是本题考查的重点。
开头可能会有 ‘+’ 和 ‘-‘,表示整数的正负。
字符串为 null 或是空(””)呢?
字符串中包含非数字的字符
只有一个 “+” 或 “-“ 字符呢?
最后就是溢出问题。
先放出我的代码吧!public static int atoi(String s) throws Exception{
if (s == null || s.length() == 0) {
throw new Exception("illegal number input");
}
final int MAX_DIV = Integer.MAX_VALUE / 10;
final int MIN_DIV = -(Integer.MIN_VALUE / 10);
final int MAX_M = Integer.MAX_VALUE % 10;
final int MIN_M = - (Integer.MIN_VALUE % 10);
int result = 0;
int i = 0, len = s.length();
int sign = 1;
int digit = s.charAt(0); //当前字符
if (digit == '-' || digit == '+') {
if (digit == '-') {
sign = -1;
}
if (len == 1) {
throw new Exception("illegal number input