题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
数值为0或者字符串不是一个合法的数值则返回0
eg:
输入:
“+2147483647”
输出:
2147483647
eg:
输入:
“1a33”
输出:
0
以下是本篇文章正文内容,下面案例可供参考
解题思路
此题一共有三种情况:
- 字符数字(eg:123)
sum = sum * 10 + chs[i] - '0'
- 带符号的字符数字(eg:+/-)
将符号位做标记,最后置首位为0,不影响结果
if (chs[0] == '-') {
flg = -1;
chs[0] = '0';
} else if (chs[0] == '+') {
flg = 1;
chs[0] = '0';
}
- 非法的(eg:1a23)
当字符数组遍历到非数字字符时,break
,置sum
为0,否则就会返回之前的sum
值
if (chs[i] > '9' && chs[i] < '0') {
sum = 0;
break;
}
代码如下
import java.util.*;
public class Main {
public int StrToInt(String str) {
char[] chs = str.toCharArray();
if (chs == null || chs.length == 0) {
return 0;
}
int flg = 1;
if (chs[0] == '-') {
flg = -1;
chs[0] = '0';
} else if (chs[0] == '+') {
flg = 1;
chs[0] = '0';
}
int sum = 0;
for (int i = 0; i < str.length(); i++) {
if (chs[i] > '9' && chs[i] < '0') {
sum = 0;
break;
}
sum = sum * 10 + chs[i] - '0';
}
return flg * sum;//返回int类型
}
}