题目也可以参考:https://leetcode-cn.com/problems/string-to-integer-atoi/description/
题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数atoi()。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=18446744073709551617)。
输出:
对应每个测试案例,
若输入为一个格式合法的字符串(即恰好表示一个整数),则输出这个整数;
若输入为一个合法的字符串,但中间出现了数字、+、-以外的特殊字符,则输出第一个特殊字符之前的整数;
若输入为一个格式非法的字符串,则输出0;
若输入的数格式合法,但超出INT_MIN或INT_MAX,如果为正数输出INT_MAX,如果为负数则输出INT_MIN .
样例输入:
"+8"(省略+号输出)
"1314"
"-123456"
"1ab3"
" 010";(注意有0的时候,输出的时候是省略的)
"13 456"
"-66666666666"
"9223372036854775807"
"18446744073709551617"
"- +899999"
" - 321"
" +0 123"
样例输出:
8
1314
-123456
1
10
13
-2147483648
2147483647
2147483647
0
0
0
-------------------------------------------------------------------------------------------------------------------------------------------------------------
代码:
class Solution {
public int myAtoi(String str) {
char[] charArr=str.toCharArray();
Long result=0L;
int startIndex=0;
boolean flag=true;//正数
for(int i=0;i<charArr.length;i++){
if(startIndex==i){
if(charArr[i]==' '){
startIndex++;
continue;
}
if(charArr[i]=='+'||charArr[i]=='0'){
continue;
}
if(charArr[i]=='-'){
flag=false;
continue;
}
}
if(charArr[i]>='0'&&charArr[i]<='9'){
result=result*10+charArr[i]-'0';
if( result > Integer.MAX_VALUE)
{
if(flag)
{
result = (long) Integer.MAX_VALUE;
}
break;
}
}else{
break;
}
}
if(!flag)
{
if(result > Integer.MAX_VALUE)
{
result = (long) Integer.MAX_VALUE + 1;
}
result = - result;
}
return result.intValue();
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------
学习的内容:
1.string转char【】:char[] charArr=str.toCharArray();
2.如何表示int的最大数和最小数Integer.MAX_VALUE && Integer.MIN_VALUE;
3.判断是否超过 [−2^31, 2^31 − 1]这个范围,也是判断是否超过了int,可以用long最为边界。
要注意初始化:Long result=0L;
4. 要注意,计算int 的结果时,不能 result=result*10+charArr[i];charArrr【i】是char类型,要想得到‘0’ - ‘9’ 的数值,要使用下面的形式:result=result*10+charArr[i]-'0';
5.提供返回结果的时候:return result.intValue(); 要注意result是个long。
6.不能用 if(length>10){ break; } 判断是否越界,会出错,如图:
主要是因为,if(charArr[i]>='0'&&charArr[i]<='9')中,等于0也会计入长度length中,所以这时的length>10,不准了。
但是如果你去掉if中等于0的这个等号,也会存在问题,因为32023中的0也同样没法识别。因此不采用这种判断越界的办法,
我想出的一种办法,在上面。大家可以参考下。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
参考:https://blog.csdn.net/lnho2015/article/details/50953068
( 参考了他的主要部分,但是他的代码部分有问题)
参考:https://blog.csdn.net/lzuacm/article/details/51302398
(参考了 他的题目描述)