字符串转换为整型数

题目

Implement atoi to convert a string to an integer.
相当于实现一个C++的atoi()函数。

分析

题目不难,主要是需要考虑到对各种输入用例的处理。

  1. 字符串中空格的处理
  2. 非法字符的处理
  3. 转换结果溢出的处理

首先,对于字符串格式,空格不计入计算。
Java中String类trim()方法可以很好地解决这个问题
首字母只能是符号’+’、 ‘-‘、数字的一种。
整型数据的范围:
Integer.MAX_VALUE(2147483647)
Integer.MIN_VALUE(-2147482648)
超出范围则返回最大值与最小值。
所以我们可以用long类型的变量存储结果.

代码(Java)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Solution {
public int myAtoi(String str) {
long num = 0;
if(str == null) return 0;
str = str.trim();
if(str.length() == 0) return 0;
boolean isNeg = false;
int i = 0;
if(str.charAt(0) == '+') i++;
if(str.charAt(0) == '-') {
i++;
isNeg = true;
}
for(; i < str.length(); i++){
int tmp = (int)(str.charAt(i) - '0');
if(tmp >= 0 && tmp <= 9){
num = num * 10 + tmp;
System.out.println(num);
if(num > Integer.MAX_VALUE){
if(isNeg){
return Integer.MIN_VALUE;
}
return Integer.MAX_VALUE;
}
}else{
break;
}
}
return (int) (isNeg?-num:num);
}
}