将字符串转换成整形的题目。题目要求就一句话:Implement atoi to convert a string to an integer. 所以这道题的重点是要求中隐藏的种种条件——让程序可以正常运行。所以要考虑很多特殊的输入情况。
1.输入的字符串有空字符的情况
2.开头有加号或者减号的情况,要正常输出。
3.字符串中的数字中夹杂的字母或者其他字符的情况,可以正常输出前面的而忽略掉后面的。
4.假如完全是特殊字符,或者在第一个有效整数之前都是特殊字符的话就不进行转换,返回0。
5.如果转换出来的数字超过整型的最大值和最小值,超过最大值的返回最大值,小于最小值的返回最小值。
以上大概5种特殊情况。因为比较头疼这种特殊情况处理型的代码,所以参考别人的部分很多。以下java代码:
public class Solution {
public int myAtoi(String str) {
int max = Integer.MAX_VALUE; //定义整型最大值
int min = -Integer.MIN_VALUE; //定义整形最小值
str = str.trim(); //去掉字符串中的空格
long result = 0; //将最后的结果定义为long类型,这样可以和整型的最大最小数比较大小
int len = str.length();
if (len < 1)
return 0;
int start = 0;
boolean temp = false;
if (str.charAt(start) == '-' || str.charAt(start) == '+') { //判断正负号问题
if (str.charAt(start) == '-')
temp = true;
start++;
}
for (int i = start; i < len; i++) {
char ch = str.charAt(i);
if (ch < '0' || ch > '9') //判断是否包含特殊字符
break;
result = 10 * result + (ch-'0'); //将读出的整型数字放到最前面
if (!temp && result > max)
return max;
if (temp && -result < min) //判断是否越界
return min;
}
if (temp)
result = -result;
return (int)result;
}
}
语句的具体功能写在注释中了。需要注意的点真的是非常多。