Contents
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
/*
* 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.

* spoilers alert... click to show requirements for atoi.

* 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.

*/

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class StringToInteger {

public int atoi(String str) {
long result = 0;
int sign = 1;//1为正-1为负
int index = 0;
//找到第一个不是空格的字符
for(; index < str.length() && str.charAt(index) == ' '; index++) ;

if(index < str.length() && (str.charAt(index) == '+' || str.charAt(index) == '-')){
sign = str.charAt(index) == '+' ? 1 : -1;
index++;
}
for(; index < str.length(); index++){
if(str.charAt(index) < '0' || str.charAt(index) > '9')
break;
result = result * 10 + (str.charAt(index) - '0');
}
result *= sign;
result = Math.min(result, Integer.MAX_VALUE);
result = Math.max(result, Integer.MIN_VALUE);
return (int)result;
}
}


//题目后来更新了,有的数据超过了long的范围
public int atoi(String str) {

long result = 0;
int sign = 1;//1为正-1为负
int index = 0;
//找到第一个不是空格的字符
for(; index < str.length() && str.charAt(index) == ' '; index++) ;

if(index < str.length() && (str.charAt(index) == '+' || str.charAt(index) == '-')){
sign = str.charAt(index) == '+' ? 1 : -1;
index++;
}
//在这里判断时忽略前面的'-'或'+'
for(; index < str.length(); index++){
if(str.charAt(index) < '0' || str.charAt(index) > '9')
break;
result = result * 10 + (str.charAt(index) - '0');
//处理大于Integer.MAX_VALUE或小于Integer.MIN_VALUE的数据
if(result > Integer.MAX_VALUE)
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
result *= sign;
result = Math.min(result, Integer.MAX_VALUE);
result = Math.max(result, Integer.MIN_VALUE);
return (int)result;
}
Contents