您的位置:首页 > Web前端

剑指offer-把字符串转换成整数

2018-04-02 15:52 246 查看

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入描述:输入一个字符串,包括数字字母符号,可以为空

输出描述:如果是合法的数值表达则返回该数字,否则返回0

地址:牛客链接

问题分析

这就是个边界条件考察题。考察是否考虑了全部情况。但遗憾的是,牛客的测试用例并不全。

注意问题如下:

第一个字符是否为符号位,第一位可以是 ‘+’ , ‘-’ , 与 ‘0’~ ‘9’

最值得注意的是下溢出问题上溢出问题

经验教训

边界条件一定要考虑完全

下溢出与上溢出问题

代码实现

public class Solution {
public int StrToInt(String str) {
if(str == null || str.length() == 0) {
return 0;
}
char[] chs = str.toCharArray();
long res = 0L;
for (int i = 0; i < chs.length; i++) {
if (i == 0 && (chs[i] == '+' || chs[i] == '-')) {
continue;
}
int curNum = chs[i] - '0';
if(curNum > 9 || curNum < 0 ) {
return 0;
}
if (curNum <= 9 && curNum >= 0) {
//res = res * 10 + curNum;
res = (res << 1) + (res << 3) + curNum;
//检查无符号数是否越界:2^31
if (res > 0x80000000L) {
return 0;
}
}
//检查正数是否越界:2^31 - 1
if (chs[0] != '-' && res == 0x80000000L) {
return 0;
}
}
return (int)(chs[0] == '-' ? 0 - res: res);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer 溢出