题目描述
链接:题目传送门
来源:牛客网
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
题目分析
- 将字符串转化为数组
- 第一个元素是否为“+” / “-” 正负号与正常数字的区别处理
- 第一个字母是否为0
- 通过字符数组怎么样判断是否合法并转换为int数组
- 由字符串转换后的数字是否发生溢出
解题代码
public static int StrToInt(String str) {
if (str.isEmpty())
return 0;
//判断字符串中是否只有+/-
if (str.equals("+")||str.equals("-"))
return 0;
int flag=0;
//字符串转化为字符数组
char[] chars = str.toCharArray();
//创建相同长度的数组存储数字
int[] tmp = new int[chars.length];
//判断第一个字符是否为+/-,如果为则房子tmp中下标为0的位置,并且将
//flag置为1.通过此方法进行动态判断第一个字母。
if(chars[0]=='+'||chars[0]=='-'){
tmp[0]=chars[0];
flag=1;
}
//判断字符数组是否为0-9,并转换为数组存入tmp中
for (int i = flag; i < chars.length; i++) {
int a = (int)chars[i];
if (a >= 48 && a <= 57)
{
int b = (int) chars[i];
tmp[i] =b-48;
}
else
return 0;
}
//对数组数组进行重组为数字
int s=tmp[flag];
for (int i = flag+1; i <tmp.length ; i++) {
s=s*10+tmp[i];
}
//通过第一个字符的类型判断输出结果
if(tmp[0]=='+')
return s;
else if(tmp[0]=='-')
return -s;
else
return s;
}
此解法中没有溢出情况的判断,提供两个关于本题的溢出判断思路
- 通过数字数组与最后结果的进行比对判断,如果溢出两者每位上的数组不会相同
- 在程序中使用long类型,判断之后转化为int
- 正常的溢出判断方法后续学会补充