把字符串转换成整数

题目描述

链接:题目传送门
来源:牛客网

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

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

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

题目分析

  • 将字符串转化为数组
  • 第一个元素是否为“+” / “-” 正负号与正常数字的区别处理
  • 第一个字母是否为0
  • 通过字符数组怎么样判断是否合法并转换为int数组
  • 由字符串转换后的数字是否发生溢出

解题代码

public static int StrToInt(String str) {
        if (str.isEmpty())
            return 0;
        //判断字符串中是否只有+/-
        if (str.equals("+")||str.equals("-"))
            return 0;
        int flag=0;
        //字符串转化为字符数组
        char[] chars = str.toCharArray();
        //创建相同长度的数组存储数字
        int[] tmp = new int[chars.length];
        //判断第一个字符是否为+/-,如果为则房子tmp中下标为0的位置,并且将
        //flag置为1.通过此方法进行动态判断第一个字母。
        if(chars[0]=='+'||chars[0]=='-'){
            tmp[0]=chars[0];
            flag=1;
        }
        //判断字符数组是否为0-9,并转换为数组存入tmp中
        for (int i = flag; i < chars.length; i++) {
            int a = (int)chars[i];
            if (a >= 48 && a <= 57)
            {
                int b = (int) chars[i];
                tmp[i] =b-48;
            }
            else
                return 0;
        }
       //对数组数组进行重组为数字
        int s=tmp[flag];
        for (int i = flag+1; i <tmp.length ; i++) {
            s=s*10+tmp[i];
        }
        //通过第一个字符的类型判断输出结果
        if(tmp[0]=='+')
            return s;
        else if(tmp[0]=='-')
            return -s;
        else
            return s;
    }
此解法中没有溢出情况的判断,提供两个关于本题的溢出判断思路
  • 通过数字数组与最后结果的进行比对判断,如果溢出两者每位上的数组不会相同
  • 在程序中使用long类型,判断之后转化为int
  • 正常的溢出判断方法后续学会补充
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页