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

    题目描述

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
     
     
     
    题目分析:首先搞清楚什么样的字符串表示数值。A[.B][e|E C]或者.B[e|E C]
    A[.B][e|E C]表示:A代表数值的(带符号)整数部分,[.B]可以没有,但是如果有了'.',则必须要有小数点后点的小数部分B(无符号的数值),指数e|E可以没有,但是有的话,必须后面带(带符号的)数值部分
    同理:.B[e|E C], 没有A部分
     
     
     1 class Solution {
     2 private:
     3     bool scanUnsignedInteger(char* &str) {
     4         char* before = str;
     5         while (*str != '' && *str >= '0' && *str <= '9') {
     6             str++;
     7         }
     8         return str > before;
     9     }
    10     bool scanInteger(char* &str) {
    11         if (*str == '+' || *str == '-') {
    12             str++;
    13         }
    14         return scanUnsignedInteger(str);
    15     }
    16 public:
    17     bool isNumeric(char* string)
    18     {
    19         if (string == nullptr) {
    20             return false;
    21         }
    22         bool numeric = scanInteger(string);
    23         // 如果出现'.',则接下来是数字的小数部分
    24         if (*string == '.') {
    25             string++;
    26             // 下面一行用||的原因:
    27             // 1.小数可以没有整数部分, 如.123等于0.123
    28             // 2.小数点后面可以没有数字,如233.等于233.0
    29             // 3.小数点前面和后面都可以有数字,如233.666
    30             numeric = scanUnsignedInteger(string) || numeric; //只有当小数点前后都没有数字的时候,numeric = false;
    31         }
    32         if (*string == 'e' || *string == 'E') {
    33             string++;
    34             // 用&&的原因:
    35             // 1.当e或者E前面没有数字的时候,整个字符串不能表示数字,如.e1, e1;
    36             // 2.当e或者E后面没有整数的时候,整个字符串不能表示数字,如12e、12e+5.4
    37             numeric = numeric && scanInteger(string); 
    38         }
    39         return numeric && *string == '';
    40     }
    41 };
  • 相关阅读:
    1. 加载文件的方法
    9. 位运算符
    8. 条件(条目,三元)运算符
    3. PHP比较运算符
    hdu3336 Count the string
    Codeforces Round #228 (Div. 2)
    hdu4288 Coder(线段树单点更新)
    hdu2852 KiKi's K-Number
    poj1195
    poj2299
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11264451.html
Copyright © 2011-2022 走看看