剑指 offer 笔记 49 | 把字符串转换成整数

2019-11-13  本文已影响0人  ProudLin

题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0

输入描述:

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

输出描述:

如果是合法的数值表达则返回该数字,否则返回0

示例1

输入
+2147483647
1a33

输出
2147483647
0

思路分析
只有第一个位置上的字符可以是+或-或数字,其他位置上的字符必须是数字
如果第一个字符是-,返回结果必须是负数
如果字符串只有一个字符,且为+或-,这情况很容易被忽略
在对字符串解析转换时,如果发现溢出(包括正数向负数溢出,负数向正数溢出),必须有所处理。

解释说明:

public class Solution {
    public int StrToInt(String str) {
      //判断输入是否合法
        if(str == null || str == "" || str.equals("+") || str.equals("-"))
            return 0;

        int flag = 0;
        long sum = 0;
        char [] strArray = str.toCharArray();
        for(int i=0;i<strArray.length;i++)
        {
            if(strArray[0] == '-' && i == 0)
            {//是负数记录下来
                flag = 1;
                continue;
            }
            if(strArray[0] == '+' && i == 0)
            {//是整数
                continue;
            }
            if(!judge(strArray[i]))//判断是不是正常的数
                return 0;
            sum = sum * 10 + strArray[i] - '0';
        }
        if(flag == 1)
        {
            sum = sum * (-1);
            if(sum < Integer.MIN_VALUE)
                return 0;//判断越界没
            return (int)sum;
        }
        if(sum > Integer.MAX_VALUE)
            return 0;//判断越界没
        return (int)sum;
    }
    private boolean judge(char ch)
    {//利用ASC码,不在这个范围内的ASC码直接返回false,说明不是正常的数
        int number = ch - '0';
        if(number >= 0 && number <= 9)
        {
            return true;
        }
        return false;
    }
}

https://cloud.tencent.com/developer/article/1388407

上一篇 下一篇

猜你喜欢

热点阅读