JZ67 把字符串转换成整数

JZ67 把字符串转换成整数

题目

描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0

示例1 输入:"+2147483647"
返回值:2147483647

示例2 输入:“1a33”
返回值:0

解题思路

看到这道题首先我们应该想到要判断边界问题,也就是你的下标不可以超出str.length();其次:
第一、如果是一个空字符或者字符串长度为零,返回0。
第二、如果输出的整形越过了Int的边界,那么返回Int的边界值。
第三、如果是一个无效的字符串,比如数字中夹杂着字母,返回0
第四、如果字符串符号为空,默认为正数。
所以第一步检测空字符,很简单,

if(str == null || str.length()==0)return 0;

第二步,检查正负号,字符串第一位如果为‘+’,那么标识符设为1,如果字符串第一位为‘-’,标识符设置成‘-1’.同时i置到下一位。

int flag = 0;
if (str.charAt(i) == '+') {
    i++;
} else if (str.charAt(i) == '-') {
    flag = -1;
    i++;
}else{
    flag = 1;
    i++;
}

第三步,对剩余的字符串转化成整数,并且比较结果与Int类型的边界值

运行代码


public class Solution{
    public int StrToInt(String str) {
        int i = 0;
        int length = str.length();
        if (length == 0) return 0;
        int flag = 0;
        if (str.charAt(i) == '+') {
            i++;
        } else if (str.charAt(i) == '-') {
            flag = -1;
            i++;
        }else{
            flag = 1;
            i++;
        }
        int num = 0;
        while (i < str.length() && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
            int index = str.charAt(i);
            if (num > Integer.MAX_VALUE) {
                return Integer.MAX_VALUE;
            } else if (num < Integer.MIN_VALUE) {
                return Integer.MIN_VALUE;
            }
            if (index >= '0' && index <= '9') {
                num = num * 10 + str.charAt(i) - '0';
            } else {
                return 0;
            }
            i++;

        }
        return (flag * num);
    }
}

有可以改进的地方欢迎各位大佬指点

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值