Solution 20: 字符串转整数问题
问题描述
输入一个表示整数的字符串,把该字符串转成整数输出。
解决思路
考虑如下情况:
(1) 符号位;
(2) 是否溢出?溢出后的处理;
(3) 对于不合法的输入的处理。
程序
1. 假设输入合法
public class Atoi {
public int transToInt(String s) {
if (s == null || s.length() == 0) {
return 0;
}
boolean pos = true;
int i = 0;
char bc = s.charAt(0);
if (bc == '+' || bc == '-') {
++i;
pos = bc == '-' ? false : true;
}
s = s.substring(i); // remove begin sign
int sum = 0;
int base = 10;
for (i = 0; i < s.length(); i++) {
sum = sum * base + (s.charAt(i) - '0');
}
return pos ? sum : -sum;
}
}
2. 假设输入不一定合法
public int transToIntCheckIllegal(String s) throws Exception {
if (s == null || s.length() == 0) {
return 0;
}
boolean pos = true;
int i = 0;
char bc = s.charAt(0);
if (bc == '+' || bc == '-') {
++i;
pos = bc == '-' ? false : true;
}
s = s.substring(i); // remove begin sign
long sum = 0;
int base = 10;
for (i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!(c >= '0' && c <= '9')) {
throw new Exception("Error: Illegal input!");
}
sum = sum * base + (c - '0');
}
if (pos && sum >= Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
}
if (!pos && -sum <= Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
return (int) (pos ? sum : -sum);
}

浙公网安备 33010602011771号