360笔试不使用库函数将字符串转为整型

题目:输入一个字符串,若字符串满足实数的要求则输出该实数的整数部分,如果不满足则输出0,不能使用将字符串转为实数的库函数。(题目大体是这样的,我做题做懵了,题目也记得不是很清楚)

解题的关键步骤:

一、 判断是否满足实数的格式,最简单直观的方法就是使用正则表达式

二、 获取最后需要将其转换为int型的字符串

因为只要实数的整数部分,所以就选择.(小数点)之前的部分就可以,但是会存在一个问题,可能输入的就是一个整数形式的字符串,短时间内可能我们会想到分情况讨论,这会使问题变复杂,在这里我的处理方式是在字符串后面加.(小数点),在程序中我使用了String类的indexOf()方法,若字符串中有小数点则会先匹配到原有的小数点,若没有小数点,则会匹配到新加入的小数点,最后使用substring(0,indexOf(‘.’))就可以得到整数部分对应的字符串

三、 得到的字符串可能是负数也可能是负数,需要分情况讨论

四、 将字符串转为整数(不能使用库函数)

可能很多人会和我一开始的做法一样直接强转(int),但是最后会发现得到的结果不正确,正确的处理方法是将对应的字符减去48,为什么减去48?因为0在uncode编码表中的编号是48,(其实我们常见的编码都是兼容ASCII码表的,记住ASCII码表中常见的就可以),例如在字符串中含有字符5,如果直接强转为int那么的到的为53(在码表中的编号为53),所以需要减去48;

步骤说完以后,看具体代码。看步骤时可以结合代码来看,文字中的描述可能会不准确。

port java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

   public static void main(String[] args) {

     // TODO Auto-generated method stub

     Scanner sc=new Scanner(System.in);

     String num=sc.nextLine();

     System.out.println(get(num));

     sc.close();

   }

  

   public static int get(String str) {

     String regex="^-?\\d+\\.*\\d*$";

     /*正则表达式解释

      *^ :开始位置

      *-? :0或者1个-

      *\d+:至少一个数字

      * .*:有或者没有.

      * \d+:有或者没有数字

      *$结束位置

      * */

     Pattern pattern=Pattern.compile(regex);//创建正则表达式对象

     Matcher macther=pattern.matcher(str);//将正则表达式对象与字符串相联系并获得一个连接器

     int result=0;//最后的返回结果

    

     str=str+".";//为统一如果输入的是整数,就不能检索到.的情况,因为最后结果只需要.前面的部分,所以加上.对结果无影响

     if(macther.matches()) {

        int index=str.indexOf('.');

        String substring=str.substring(0,index);

       

        char array[]=substring.toCharArray();

        if(array[0]=='-') {

           for(int i=1;i<substring.length();i++) {

             result=result*10+(array[i]-48);//根据编码将字符转换为int型数,0在编码表中的编号为48;

           }

           return -result;

        }

        else {

           for(int i=0;i<substring.length();i++) {

             result=result*10+(array[i]-48);//根据编码将字符转换为int型数

           }

           return result;

        }

     }

     return 0;

   }

   }

猜你喜欢

转载自www.cnblogs.com/zhaolei1996/p/10767628.html