题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
思路
如果有符号位,除符号位,字符串的每一位不能是’’0’-'9’以外的值,如果有,返回0。
注意整数范围,如果越界,返回0。
java实现
public class Solution {
public int StrToInt(String str) {
if (str == null || str.length() == 0)
return 0;
int start;//开始位 如+1,-1的开始位为1,1的开始位置为0
int tag;//正负号标注 tag=0表示是负数 tag=1表示是正数
if (str.charAt(0) == '+') { //如"+100",开始位为1,tag=0表示是负数
tag = 1;
start = 1;
} else if (str.charAt(0) == '-') { //如"-100",开始位为1,tag=1表示是正数
tag = 0;
start = 1;
} else { //如"100",开始位为0,tag=1表示是正数
tag = 1;
start = 0;
}
long result = 0;//用于数字判断是否越界
for (int i = start; i < str.length(); i++) {
char tmp = str.charAt(i);
if (tmp >= '0' && tmp <= '9') {
result = result * 10 + (tmp - '0');//获取绝对值
if (tag == 1 && result > Integer.MAX_VALUE)//为整数 越界
return 0;
if (tag == 0 && -1 * result < Integer.MIN_VALUE)//为负数 越界
return 0;
} else {//不是'0'-'9'
return 0;
}
}
if (tag == 0) //为负数
return (int) (-1 * result);
else {//为正数
return (int) result;
}
}
}