zoukankan      html  css  js  c++  java
  • 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;

       }

       }

    心有多大,天有多高,一起奋斗!!
  • 相关阅读:
    Revit 二次开发参照属性
    存储过程分页 (多条件拼接)
    Dapper的使用
    C#实现简单的邮件发送
    ORM 简介
    Web Services简介
    事物、锁、存储过程
    游标和触发器简介
    ASP.NET 上传文件方法
    C# Web API 实现上传功能
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/10767628.html
Copyright © 2011-2022 走看看