美文网首页
剑指offer67题_字符串转换为int

剑指offer67题_字符串转换为int

作者: zhouwaiqiang | 来源:发表于2019-03-27 17:08 被阅读0次

    题目描述

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

    输入描述

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

    输出描述

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

    示例输入

    +2147483647
    1a33
    

    示例输出

    2147483647
    0
    

    题目分析

    1. 首先我们需要判断字符串首位的符号,第一位可能是+也可能是-也可能没有(默认的是正数),那么需要一个布尔变量作为符号的判断
    2. 假设我们的符号判断的布尔值为true那么设置一个factor表示其乘积因子为1, 否则设置为-1,作为后面累加字符串数据使用
    3. 从判断符号之后的索引开始遍历执行,while循环执行即可,必须满足index下标小于字符串长度,并且对应的字符在0-9之间,此时则可以进行result = result*10+factor*(str.charAt(i)-'0')进行累加计算得到结果
    4. 累加计算后需要判断是否溢出,溢出的判断采用声明高一级的数据,用于结果和Integer.MAX_VALUE和Integer.MIN_VALUE进行比较即可,超过这个值表示溢出那么返回0。
    5. 如果在循环结束后正常情况下,下标索引==字符串长度,如果不等于那么说明中间有别的字符,直接返回0。否则就返回我们得到的结果需要转换为int

    需要注意的点

    1. 关于字符串转换表达式result = result*10+factor*(str.charAt(i)-'0')
    2. 判断输入的字符串下界情况,即字符串为空或者字符串指向null
    3. 字符串非法输入(遍历无法完整结束)
    4. 结果溢出(声明更大的类型变量进行存储进行溢出判断)

    Java代码

    public class Solution {
        public int StrToInt(String str) {
            if(str==null || str.length()==0) return 0;
            boolean flag = true;//符号位,true表示正数,false表示负数
            int index = 0;//字符串下标索引
            if (str.charAt(index) == '+') {
                index++;
                flag = true;
            }
            else if (str.charAt(index) == '-') {
                flag = false;
                index++;
            }
            int result = 0;
            if (index != str.length()) result = stringToInt(str, index, flag);
            return result;
        }
        
        private static int stringToInt(String str, int index, boolean flag) {
            int factor = flag? 1 : -1;
            long result = 0;
            while (index < str.length() && str.charAt(index)>='0' && str.charAt(index)<='9') {
                result = result*10 + factor*(str.charAt(index)-'0');
                if (result>Integer.MAX_VALUE|| result<Integer.MIN_VALUE) {
                    return 0;
                }
                index++;
            }
            if (index==str.length()) return (int)result;
            return 0;
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指offer67题_字符串转换为int

          本文链接:https://www.haomeiwen.com/subject/zvctbqtx.html