JZ67 把字符串转换成整数

Posted 张同学吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
    }
}

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

以上是关于JZ67 把字符串转换成整数的主要内容,如果未能解决你的问题,请参考以下文章

JZ67 把字符串转换成整数

JZ67 把字符串转换成整数

剑指 Offer JZ49 把字符串转换成整数

LeetCode(剑指 Offer)- 67. 把字符串转换成整数

LeetCode(剑指 Offer)- 67. 把字符串转换成整数

剑指Offer-JZ67剪绳子