zoukankan      html  css  js  c++  java
  • 【剑指Offer】49、把字符串转换成整数

      题目描述:

      将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

      输入输出描述:

      输入一个字符串,包括字母、数字、符号,可以为空。如果是合法的数值表达则返回该数字,否则返回0。

      解题思路:

      本题解决起来并不困难,功能实现简单,但是主要的问题是能否把各种不同的特殊情况都考虑进去,也就是代码的鲁棒性和思考的全面,比如空指针、空字符串、正负号、溢出等等问题。

      主要需要注意的点有以下几个:

    • 字符串是否为null或者字符串是否为空字符串。
    • 字符串对于正负号的处理,特别是正号,可能有也可能没有,但都代表正数
    • 输入值是否合法,判断除首位可能为正负号外,其他位是否都是数字
    • int为32位,最大的整数是刚刚超过21亿,也就是10位十进制数
    • 使用错误标志,区分合法值0和非法值0

      以下直接给出相应的代码实现。

      编程实现(Java):

    public class Solution {
        public int StrToInt(String str) {
            if(str==null || str.length()<1)
                return 0;
            boolean isVaild=false; //用来标记是否合法
            char c = str.charAt(0);
            int flag=0;
            //通过首位进行判断,并标记
            if(c=='+') //为正数
                flag=1;
            else if(c=='-') //为负数
                flag=-1;
            else if(c>='0'&&c<='9') { //正数
                flag=1;
                str="+"+str; //便于统一处理
            }else { //不是数
                isVaild=true;
                 return 0;
            }
               
            int len= str.length();
            
            //计算后续数字
            if(len>11) //最大整数是10位
                return 0;
            long res=0;
            for(int i=1;i<len;i++){
                c=str.charAt(i);
                if(c<'0'||c>'9'){
                    isVaild=true;
                    return 0;
                }
                   
                res=res*10+(c-48); //计算数值大小
            }
            if(flag==1 && res<=Integer.MAX_VALUE)
                return (int)res;
            if(flag==-1 && (-1*res)>=Integer.MIN_VALUE)
                return (int)(-1*res);
            isVaild=true;
            return 0;
        }        
    }
    
  • 相关阅读:
    按钮字体颜色的设置
    异常
    数据存储
    SQLiteOpenHelper
    MVC
    在单线程模型中 Message、Handler、Message Queue、Looper 之间的关系
    ListView 的优化方案
    fragment生命周期及优点
    ANR
    Android系统架构
  • 原文地址:https://www.cnblogs.com/gzshan/p/10868700.html
Copyright © 2011-2022 走看看