剑指offer算法题
字符串 数学
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
题目分析
本题主要考察边界判断。
如,数字上下限,空字符串,只有正负号,有无正负号,以及是否是正确数字这几项。
数字结果的上下限判断可以先利用long型来存储计算的结果,之后跟Int型的Integer.MAX_VALUE和Integer.MIN_VALUE进行比较即可。
String 转 Int可以用 str.charAt(index)- ‘0’ 来取得int型数字。
下面是Java代码
public class Solution {
public int StrToInt(String str) {
int len = str.length();
if(len == 0){
return 0;
}else if(len == 1){
if(str.charAt(0) >57 || str.charAt(0)<48){
return 0;
}else{
return str.charAt(0)-'0';
}
}else{
int flag = 1;
int i = 0;
if(str.charAt(0) == 45){
flag = -1;
i++;
}
if(str.charAt(0) == 43){
i++;
}
long result = 0;
for( ; i < len ; i++){
int tmp = str.charAt(i);
if(tmp >57 || tmp <48){
return 0;
}
result += (tmp - '0' )* (int) Math.pow(10,len-1-i);
}
//用long型存储结果,之后跟Integer的上下限进行比较。
if(flag == 1 && Integer.MAX_VALUE < result){
return 0;
}
if(flag == -1 &&Integer.MIN_VALUE > -result){
return 0;
}
return flag>0 ? (int)result: -(int)result;
}
}
}