实现一个atoi函数,将一个字符串转换为一个整数。
提示:请仔细的考虑所有可能的输入用例。如果你想挑战的话,请不要浏览一下的内容,自己尝试着思考一下。
aoti函数的要求:
该函数首先在找到第一个非空白字符之前,尽可能多的丢弃空白字符。然后从根据这个字符,取一个可选的初始正负号,
并尽可能多的往下找数值,并将它们解释为相应的数字。
该字符串可以在数字的后面包含其他的字符,这些字符被忽略,并且对这个函数的行为没有影响。
如果字符串中第一批非空白字符不是有效的整数,或者字符串为空或者只包含空白字符,那函数就不执行转换。
如果不能执行有效的转换,则返回零值。如果转换后的值超过了整数可表示的正确范围,返回INT_MAT或INT_MIN。
1.
public int myAtoi(String str)
{
int maxInt = Integer.MAX_VALUE; // 整数的最大值
int minInt = Integer.MIN_VALUE; // 整数的最小值
double ans = 0;
boolean flag = false; // 正负号的标志, 默认表示正
int st = 0;
// 如果str是空字符串
if (str.trim().isEmpty())
{
return (int)ans;
}
char[] array = str.toCharArray();
// 寻找第一个非空白字符
while (array[st++] == ' '); // 这里跳出循环时,st又加了一次。
// 判断正负号
if (array[--st] == '-')
{
flag = true;
}
else if (array[st] == '+')
{
;
}
else
{
st--; // 这样使得下面的for循环第一个为要遍历的数字。
}
for (int i=st+1; i<array.length; i++)
{
// 判断遍历的每一个字符是否是整数
if (array[i] >= '0' && array[i] <= '9')
{
int tmp = array[i] - '0';
ans = ans * 10 + tmp;
}
else
{
break;
}
}
// 还原数值的正负
if (flag==true)
ans = -ans;
// 判断转换后的整数是否在整数的合法范围内
if (ans > maxInt)
ans = maxInt;
if (ans < minInt)
ans = minInt;
return (int)ans;
}