zoukankan      html  css  js  c++  java
  • 剑指Offer_53_表示数值的字符串

    题目描述

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

    解题思路

    首先判断是否有符号(+或者-),如果有,则对后面的字符串判断
    首先需要扫描数字直到结束或是遇到其他字符,结束则返回true,否则继续按情况判断下一个需要判断的字符

    • 如果是小数点'.',是则扫描数字,直到结束(返回true)或者遇到特殊字符,如果是e或E,那么对后面的数判断是否符合指数表示,如果是其他字符则返回false。
    • 如果是e或者E,那么对后面的数判断是否符合指数表示。
    • 如果不符合上面的情况则返回false

    指数判断:
    首先判断是否是符号,如果是,跳到下一位判断后面的是否是数字组成的串,是则表示指数表示是正确的,否则是不正确的。

    实现

    public class Solution {
        /**
         * 根据题目要求,正确的输入格式应该符合以下的形式:
         * [sign]integer-digits[.[fragment-digits]][e|E[sign]exponential-digits]
         * []中的表示不一定需要
         * @param str
         * @return
         */
        public boolean isNumeric(char[] str) {
            if (str == null || str.length <= 0) return false;
            int index = 0;
            //判断是否有符号
            if(str[index] == '+' || str[index] == '-'){
                index++;
            }
            //如果只有符号位,则不是正确的数字
            if (index == str.length) return false;
            //扫描数字
            index = scanDigits(str,index);
            if (index < str.length){
                //如果有小数
                if (str[index] == '.'){
                    index++;
                    index = scanDigits(str,index);
                    //如果有指数表示的形式
                    if (index < str.length){
                        if (str[index] == 'e' || str[index] == 'E'){
                            index++;
                            return isExponential(str,index);
                        }
                        return false;
                    }
                    return true;
                }else if (str[index] == 'e' || str[index] == 'E'){
                    //如果没有小数,且有指数形式
                    index++;
                    return isExponential(str,index);
                }
                return false;
            }
            return true;
        }
    
        private boolean isExponential(char[] str, int index) {
            if (index < str.length){
                //如果是符号,跳到下一个
                if (str[index] == '+' || str[index] == '-'){
                    index++;
                }
                index = scanDigits(str,index);
                if (index == str.length) return true;
                return false;
            }
            return false;
        }
    
        private int scanDigits(char[] str, int index) {
            while (index < str.length && str[index] >= '0' && str[index] <= '9') index++;
            return index;
        }
    }
    
  • 相关阅读:
    Spring Cloud Sleuth服务跟踪
    Spring Cloud Zuul(服务网关)
    百度地图,定位,添加图标
    kmp算法
    将16进制unsigned char数组转换成整数
    导入多个手机的数据库数据到本地数据库
    VLC添加水印
    QAbstractItemView区分单双击
    QWebView崩溃的问题
    Windows平台dump文件的产生,调试;工程配置pdb文件怎么生成
  • 原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5812351.html
Copyright © 2011-2022 走看看