牛客网--把字符串转换为整数(综合)

题目:

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

输入描述:

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

输出描述:

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

示例1

输入                            输出

+2147483647          2147483647
    1a33             0

知识点:

1、常见字符的ASCII码值:

空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。

2、int的取值范围为-2^31~2^31-1(2^31=2147483648)

3、负号的字典顺序:除去负号看数字部分。

例如:“-123”与“-2147483648”用compareTo比较,“-123”>“-2147483648”

思路:

1、将字符串转为char[],设置判别正负号的标记位,设置int型输出和:sum

2、判断输入的String类型的整数是否超过int值范围。

3、若str中除了第一位是'-'或'+',其余均为数字,将char类型数值转为int类型

4、每输入一个数字前,将原有sum*10,在将此次得到的值加到sum中

5、若为负数,结果值用0-;其余直接输出

答案:

public class Solution {
    public int StrToInt(String str) {
        if(str==""||str.length()==0){return 0;}
        char[] ch = str.toCharArray();
        int sum=0;
        boolean flag = false;//判断符号标记位
        if(ch[0]=='-'){
                flag = true;
            if(str.compareTo("-2147483648")>0){return 0;}//超过int的范围
        }else if(ch[0]=='+'){
            if(str.compareTo("+2147483648")>=0){return 0;}
        }else{if(str.compareTo("2147483648")>=0){return 0;}}
        for(int i=0;i<ch.length;i++){
            if(Character.isDigit(ch[i])||ch[0]=='-'||ch[0]=='+'){
                if(Character.isDigit(ch[i])){// 判断是否是数字
                    sum = sum*10;
                    int num = (int)ch[i] - (int)('0');
                    sum+=num;
                }
            }else{
                return 0;
            }
        }
        if(flag){//负数
            sum = 0-sum;
            return sum;
        }
        return sum;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值