Implement atoi to convert a string to an integer.
首先检查字符串开头是否是空格,若是空格则忽略;
接着检查是否有正负号,正负号最多只能出现一个;
其次是检查后面是不是数字,若是数字则进行转换,越界的返回临界值;
若出现的不是数字,则返回已检测到的数字即可.
public int myAtoi(String str) {
long result=0;
str=str.trim();
int len=str.length();
int flag=1;
int f1=0;
for(int i=0;i<len;i++){
if(str.charAt(i)=='-'&&f1==0){
flag=-1;
f1=1;
}
else if(str.charAt(i)=='+'&&f1==0){
f1=1;
flag=1;
}
else if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
result=result*10+(str.charAt(i)-'0');
if(result>Integer.MAX_VALUE){
if(flag==1)//越界之后返回最大值或最小值
return Integer.MAX_VALUE;
else
return Integer.MIN_VALUE;
}
}else //输入非数字字符,直接返回0
return (int)result*flag;
}
return (int)result*flag;
}
上述实现复杂化了,因为数字的出现顺序肯定是符号在前面,因此更换版本如下:
public int myAtoi(String str) {
int flag=1;
int i=0;
long result=0;
int len=str.length();
while(i<len&&str.charAt(i)==' ')
i++;
if(i<len&&str.charAt(i)=='-'){
i++;
flag=-1;
}
else if(i<len&&str.charAt(i)=='+'){
i++;
flag=1;
}
while(i<len&&str.charAt(i)>='0'&&str.charAt(i)<='9'){
result=result*10+(str.charAt(i)-'0');
if(result>Integer.MAX_VALUE){
return flag==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
}
i++;
}
return (int)result*flag;
}