题目描述
链接:题目传送门 来源:牛客网
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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
];
if(chars
[0]=='+'||chars
[0]=='-'){
tmp
[0]=chars
[0];
flag
=1;
}
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正常的溢出判断方法后续学会补充