把字符串转换成整数

    技术2023-09-12  83

    题目描述

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

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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正常的溢出判断方法后续学会补充
    Processed: 0.008, SQL: 9