题解 | #把字符串转换成整数(atoi)#
把字符串转换成整数(atoi)
https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f
public int StrToInt (String s) {
//判断空
if(s.length()==0) return 0;
int index=0;//记录下标的一个指针
//去掉前导空格
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i)==' '){
index++;//后移
}else{
break;
}
}
System.out.println("index:"+index);
//越过前导空格后什么也没有了
if(index == s.length()) return 0;
//判断正负号
int flag=1;
if(s.charAt(index)=='-'){
flag=-1;//变负数
index++;
}else if(s.charAt(index)=='+'){//变正数
index++;
}
long res=0;//存最终结果的
for (int i = index; i < s.length(); i++) {
if(s.charAt(i)>='0' && s.charAt(i)<='9'){
res= res*10 + (s.charAt(i)-'0');
//System.out.println("res="+res);
// 半路已经溢出了,所以要半路处理,放在循环中
//处理越界的数,分正负数,如果把以下代码放在循环外
//则正数的直接会溢出变成负数,数据就错了
if(flag>0 && res>Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}
if(flag<0 && res*(-1)<Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}
}else{
break;
}
}
return (int)(flag*res) ;
}
