题目:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入 输出
+2147483647 2147483647 1a33 0
知识点:
1、常见字符的ASCII码值:
空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。
2、int的取值范围为-2^31~2^31-1(2^31=2147483648)
3、负号的字典顺序:除去负号看数字部分。
例如:“-123”与“-2147483648”用compareTo比较,“-123”>“-2147483648”
思路:
1、将字符串转为char[],设置判别正负号的标记位,设置int型输出和:sum
2、判断输入的String类型的整数是否超过int值范围。
3、若str中除了第一位是'-'或'+',其余均为数字,将char类型数值转为int类型
4、每输入一个数字前,将原有sum*10,在将此次得到的值加到sum中
5、若为负数,结果值用0-;其余直接输出
答案:
public class Solution {
public int StrToInt(String str) {
if(str==""||str.length()==0){return 0;}
char[] ch = str.toCharArray();
int sum=0;
boolean flag = false;//判断符号标记位
if(ch[0]=='-'){
flag = true;
if(str.compareTo("-2147483648")>0){return 0;}//超过int的范围
}else if(ch[0]=='+'){
if(str.compareTo("+2147483648")>=0){return 0;}
}else{if(str.compareTo("2147483648")>=0){return 0;}}
for(int i=0;i<ch.length;i++){
if(Character.isDigit(ch[i])||ch[0]=='-'||ch[0]=='+'){
if(Character.isDigit(ch[i])){// 判断是否是数字
sum = sum*10;
int num = (int)ch[i] - (int)('0');
sum+=num;
}
}else{
return 0;
}
}
if(flag){//负数
sum = 0-sum;
return sum;
}
return sum;
}
}