Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
實現字符串轉換為int型整數並不難,只是有好多中輸入情況需要考慮,容易造成遺漏。首先看一下c++ 中atoi的定義:
-----------------------------------
int atoi (const char * str);Convert string to integer Parses the C-string str interpreting its content as an integral number, which is returned as a value of type
int.
int value.
int, it causes undefined behavior. See strtol for a more robust cross-platform alternative when this is a possibility.
------------------------------------------
可以看出需要注意的有以下幾點:
去掉前面的空格注意開始時候的符號 + -忽略數字後面的雜七雜八字符考慮溢出的情況。考慮了上面幾方面,代碼就可以AC了。
public class String_To_Integer { //java
public static int atoi(String str) {
int haveMinus = 1;
long result = 0;
if(str == null || str.trim().isEmpty())
return 0;
//chech + -
str = str.trim();
if(str.charAt(0) == '-'){
str = str.substring(1);
haveMinus = -1;
}else if(str.charAt(0) == '+')
str = str.substring(1);
//check num
for(int i = 0;i < str.length() && str.charAt(i) >= '0' && str.charAt(i) <= '9'; i++){
result = result*10 + (str.charAt(i)- '0');
}
//deal overflow
if(result > 2147483647 && haveMinus == 1)
return 2147483647;
if(result > 2147483647 && haveMinus == -1)
return -2147483648;
return haveMinus*(int)result;
}
public static void main(String [] args){
System.out.println(String_To_Integer.atoi("2147483648"));
}
}