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

    表示数值的字符串

    题目描述

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

    书上版本

    class Solution {
    public:
        bool scanUnsignedInteger(char** str) {
            char *before = *str;
            while (('' != **str) && (**str >= '0') && (**str <= '9'))
                (*str)++;
            // str中处在0~9之间的数字时, 返回true
            return *str > before;
        }
        
        
        bool scanInteger(char** str) {
            if (('-' == **str) || '+' == **str)
                (*str)++;
            return scanUnsignedInteger(str);
        }
        
        bool isNumeric(char* string)
        {
            if (nullptr == string)
                return false;
            
            // 扫描整数部分, 可能带有符号
            // 扫描后string停留在非数字部分
            bool numeric = scanInteger(&string);
            
            // 如果出现小数点, 处理小数部分
            if ('.' == *string) {
                string++;
                // 扫描小数点后的数字, 带有符号部分, 使用||原因如下
                // 1. 小数点可以没有整数部分, 如.123等于0.123
                // 2.小数点后面可以没有数字, 如233.等于233.0
                // 3 小数点前后都有数字,
                numeric = scanUnsignedInteger(&string) || numeric;
            }
            
            // 如果出现e或E, 处理指数部分
            if ('e' == *string || 'E' == *string) {
                string++;
                // 使用&&原因
                // 字母前没有数字时, 整个字符串不能表示数字, 如.e1, e1
                // 字母后没有整数时, 整个字符串不能表示数字, 如 12e, 12e+5.4
                numeric = scanInteger(&string) && numeric;
            }
            
            return numeric && ('' == *string);
        }
    
    };
    
  • 相关阅读:
    NetBeans IDE 6.8 发布候选版 1 已经可用!
    怎样的提问才是有效的提问
    Drop 简介
    NetBeans 时事通讯(刊号 # 83 Dec 03, 2009)
    体悟
    《程序员》杂志第8期笔记
    svmlight
    9158.com amazing
    别人玩女人,屌丝玩手机,我没得玩了orz
    光看菜谱成不了好厨师
  • 原文地址:https://www.cnblogs.com/hesper/p/10549293.html
Copyright © 2011-2022 走看看