将字符串转换成一个整数的代码实现和思路整理

KLQ 2020-04-15 10:14:10 java常见问答 10163

你知道将一个字符串转换为一个整数的代码实现及思路吗?有很多的人都不知道应该如何去实现,下面一起来看看实例吧。

题目:

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

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

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

例:

输入

将一个字符串转换成一个整数

输出

将一个字符串转换成一个整数

思路1

代码实现:

class Solution
{
    public:
        int StrToInt(string str)
        {
            int res = 0, n = str.size(), symbol = 1;
            if (!n)
                return 0;
            int start;
            for (start = 0; start < n; start++)
            {
                if (str[start] == '-' || str[start] == '+' || ('0' <= str[start] && str[start] <= '9'))
                    break;
            }
            if (str[start] == '-')
                symbol = -1;
            for (int i = (str[start] == '-' || str[start] == '+') ? start + 1 : start; i < n; ++i)
            {
                if (!('0' <= str[i] && str[i] <= '9'))
                    return 0;
                //res=res*10+str[i]-'0';
                res = (res << 1) + (res << 3) + (str[i] & 0xf); //这里利用位运算提高计算效率 
            }
            return res * symbol;
        }
};

思路2:(比较清晰的思路)

Integer.parseInt方法

代码实现:

public int StrToInt(String str)
{
    if (str == null)
        return 0;
    int result = 0;
    boolean negative = false; //是否负数
    int i = 0, len = str.length();
    /**
     * limit 默认初始化为 负的 最大正整数 ,假如字符串表示的是正数
     * 那么result(在返回之前一直是负数形式)就必须和这个最大正数的负数来比较,
     * 判断是否溢出
     */
    int limit = -Integer.MAX_VALUE;
    int multmin;
    int digit;
    if (len > 0)
    {
        char firstChar = str.charAt(0); //首先看第一位
        if (firstChar < '0')
        { // Possible leading "+" or "-"
            if (firstChar == '-')
            {
                negative = true;
                limit = Integer.MIN_VALUE; //在负号的情况下,判断溢出的值就变成了 整数的 最小负数了
            }
            else if (firstChar != '+') //第一位不是数字和-只能是+
                return 0;
            if (len == 1) // Cannot have lone "+" or "-"
                return 0;
            i++;
        }
        multmin = limit / 10;
        while (i < len)
        {
            // Accumulating negatively avoids surprises near MAX_VALUE
            digit = str.charAt(i++) - '0'; //char转int
            if (digit < 0 || digit > 9) //0到9以外的数字
                return 0;
            //判断溢出
            if (result < multmin)
            {
                return 0;
            }
            result *= 10;
            if (result < limit + digit)
            {
                return 0;
            }
            result -= digit;
        }
    }
    else
    {
        return 0;
    }
    //如果是正数就返回-result(result一直是负数)
    return negative ? result : -result;
}

思路3:

简单常用函数

代码实现:

class Solution
{
    public:
        int StrToInt(string str)
        {
            int n = str.size(), s = 1;
            long long res = 0;
            if (!n) return 0;
            if (str[0] == '-') s = -1;
            for (int i = (str[0] == '-' || str[0] == '+') ? 1 : 0; i < n; ++i)
            {
                if (!('0' <= str[i] && str[i] <= '9')) return 0;
                res = (res << 1) + (res << 3) + (str[i] & 0xf); //res=res*10+str[i]-'0';
            }
            return res * s;
        }
};

关于将字符串转换成一个整数的代码实现和思路就给大家介绍到这里了,更多Java实例,请继续来本站的Java实例专栏了解吧。