剑49—把字符串转换成整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0

解题思路
class Solution {
 public int myAtoi(String str) {
        int i = 0;
        //1、空格
        while (i < str.length() && str.charAt(i) == ' ') {
            i++;
        }
        if (i >= str.length())
            return 0;

        //2、正负标志
        int sign = 1;
        if (str.charAt(i) == '+' || str.charAt(i) == '-') {
            if (str.charAt(i) == '-') {
                sign = -1;
            }
            i++;
        }
        //3、溢出+转换为整数
        int res = 0;
        while (i < str.length()) {
            if (str.charAt(i) < '0' || str.charAt(i) > '9') {
                break;
            }
            if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && str.charAt(i) - '0' > 7)) {
                return sign == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            res = 10 * res + (str.charAt(i) - '0');
            i++;
        }
        return res*sign;
    }
}

public class Solution {
    public int StrToInt(String str)
    {
        //空字符串
        if(str.length()==0)
            return 0;

        char[]chars=str.toCharArray();

        boolean isNegative=false;//标记正负

        int res=0;

        for (int i = 0; i <chars.length ; i++)
        {
            if(i==0&&(chars[i]=='+'||chars[i]=='-'))//首位正负号,代表数的正负
            {
                 if(chars[i]=='-')
                    isNegative=true;
                continue;//结束循环体中后面语句的执行,直接跳到for开头执行下一次循环i=1
            }
            /*
              if((chars[0]=='+'||chars[0]=='-'))//不能写成这种,这样每次都执行这条语句,continue之后,陷入死循环
            {
                 if(chars[0]=='-')
                    isNegative=true;
                continue;//结束循环体中后面语句的执行,直接跳到for开头执行下一次循环i=1
            }
            */

            //0-9之外的数字/特殊字符,都是非法输入
            if(chars[i]<'0'||chars[i]>'9')//不要把||写成&&,就错在这里了
                return 0;

            res=res*10+ (chars[i] - '0');//第一次循环,,res:0  chars:{-,1,2,3} i=1  chars[1] - '0'=对应ascii码值相减
                                          //第2次循环,,res:1  chars:{-,1,2,3} i=2 
        }
        return isNegative ? -res : res;


    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值