剑指offer之将字符串转换成整数(Java实现)

版权声明:转载请联系 :[email protected] https://blog.csdn.net/weixin_40928253/article/details/85257414

将字符串转换成整数

NowCoder

题目描述:

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

解题思路:

边界条件: 
数据上下 溢出 
空字符串 
只有正负号 
有无正负号 
错误标志输出 
public class Solution {    
    public static boolean flag;    
    public static int StrToInt(String str) {        
        flag = false;        
        //判断输入是否合法        
        if (str == null || str.trim().equals("")) {            
            flag = true;            
            return 0;        
        }        
        // symbol=0,说明该数为正数;symbol=1,该数为负数;start用来区分第一位是否为符号位        
        int symbol = 0;        
        int start = 0;        
        char[] chars = str.trim().toCharArray();        
        if (chars[0] == '+') {            
            start = 1;        
        }else if (chars[0] == '-') {            
            start = 1;            
            symbol = 1;        
        }        
        int result = 0;        
        for (int i = start; i < chars.length; i++) {            
            if (chars[i] > '9' || chars[i] < '0') {                
                flag = true;                
                return 0;            
            }            
            int sum= result * 10 + (int) (chars[i] - '0');                                      
            if((sum-(int) (chars[i] - '0'))/10!=result){                
                flag=true;                
                return 0;            
            }                         
            result=result * 10 + (int) (chars[i] - '0');
        }        
        // 注意:java中-1的n次方不能用:(-1)^n .'^'异或运算        
        // 注意,当value=-2147483648时,value=-value        
        result = (int) Math.pow(-1, symbol) * result;        
        return result;    
    }
}
public class Solution {
    public int StrToInt(String str) {
    if (str.equals("") || str.length() == 0)            
        return 0;        
    char[] a = str.toCharArray();        
    int fuhao = 0;        
    if (a[0] == '-')            
        fuhao = 1;        
    int sum = 0;        
    for (int i = fuhao; i < a.length; i++)        {            
        if (a[i] == '+')                
            continue;            
        if (a[i] < '0' || a[i] > '9')              //48代表‘0’,57代表‘9’
            return 0;      
        sum = (sum<<1)+(sum<<3) + (a[i] & 0xf);    //sum = sum * 10 + a[i] - 48; sum = (sum<<1)+(sum<<3) + (a[i] & 0xf); sum*10=sum*(2^1+2^3)
    }        
    return fuhao == 0 ? sum : sum * -1;    
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40928253/article/details/85257414