题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647 0
代码实现(一):
(1)将字符串转为字符数组;
(2)从数组最后一个字符开始向前遍历,判断是否符合条件,转化为整数;
(3)第一个元素需要单独判断,进行正负号的判断;
(4)得到的数据还要进行越界判断。
public static int StrToInt01(String str){
if(str==null || str.length()==0){
return 0;
}
char[] chars = str.toCharArray();
int result = 0;
int len = chars.length;
int n = 0;
for (int i = len-1,j = 0; i > 0; i--, j++) {
n = (int)chars[i]; //字符的ASCII码值
if(n<48||n>57){
return 0;
}
result += (n-48)*Math.pow(10,j);
}
n = (int)chars[0];
if(n>=48&&n<=57){
result += (n-48)*Math.pow(10,len-1);
}
//判断是越界
if ((result>Math.pow(2,31)-1)||(result<(-Math.pow(2,31)))){
return 0;
}else if(n==45){
return -result;
}
return result;
}
代码实现(二)
public static int StrToInt02(String str){
if(str==null||str.length()==0){
return 0;
}
int len = str.length();
int s = 1;
char[] chars = str.toCharArray();
int result = 0;
if(chars[0]=='-'){
s = -1;
}
for(int i = (chars[0]=='-'||chars[0]=='+')?1:0; i < len; i++){
if(chars[i]<'0'||chars[i]>'9'){
return 0;
}
result = (result<<1) + (result<<3) + (chars[i] & 0xf);
}
return result * s;
}