• 【剑指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;
        }        
    }
    
  • 相关阅读:
    从官网下载mod_jk.so
    一台电脑上运行两个tomcat
    官网下载apache服务器并运行
    给tomcat7w.exe改名字
    运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7
    一台电脑启动多个tomcat
    Spring和Hibernate结合的一个小例子
    spring和jdbc结合的一个小例子
    svn 文件后面显示时间和提交人
    svn 未提交的显示黑色的星*
  • 原文地址:https://www.cnblogs.com/gzshan/p/10868700.html
Copyright © 2020-2023  润新知