• 剑指offer第53题——表示数值的字符串


    题目:

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

    这个题的难点在哪里?就是要我们对于数值类字符串有一个清晰的了解:

    比如,+,-号出现的位置,.出现的位置,E出现的位置。

    先看别人的代码:

     1 class Solution {
     2 public:
     3     bool isNumeric(char* string)
     4     {
     5         if(string==NULL)
     6             return false;
     7         if(*string=='+'||*string=='-')
     8             string++;
     9         if(*string=='')
    10             return false;
    11         int dot=0,num=0,nume=0;//分别用来标记小数点、整数部分和e指数是否存在
    12         while(*string!=''){
    13             if(*string>='0'&&*string<='9')
    14             {  
    15                 string++;
    16                 num=1;
    17             }
    18             else if(*string=='.'){
    19                 if(dot>0||nume>0)
    20                     return false;
    21                 string++;
    22                 dot=1;
    23             }
    24             else if(*string=='e'||*string=='E')
    25                 {
    26                   if(num==0||nume>0)
    27                       return false;
    28                   string++;
    29                   nume++;
    30                   if(*string=='+'||*string=='-')
    31                       string++;
    32                  if(*string=='')
    33                      return false;
    34                 }
    35             else
    36                 return false;
    37         }
    38         return true;
    39     }
    40  
    41 };
    42 //注意表示数值的字符串遵循的规则;
    43 //在数值之前可能有一个“+”或“-”,接下来是0到9的数位表示数值的整数部分,如果数值是一个小数,那么小数点后面可能会有若干个0到9的数位
    44 //表示数值的小数部分。如果用科学计数法表示,接下来是一个‘e’或者‘E’,以及紧跟着一个整数(可以有正负号)表示指数。

    分析其思路:

    首先判断第一个字符是不是+,-号,之后依此对数字,小数点,字符e(E)进行判定。他的判顶规则是:

    小数点最多只能有一个,且只能出现在字符e(E)的前面!

    字符e也只能有一个,且其前面必须要有数字,最后补了一个e后面如果只有+,-没有数字,那么是错误的。

    也就是全程让数字判断,小数点判断,和字母e判断各司其职。这样程序的思路是非常清晰的!!!

    而我之前的想法是:

    从第一个字母到最后一个字母,判断字符的前后位置关系是否正确。并且区分了一个字符,两个字符,三个字符,多个字符的情况,显然基于这种分类分思想是错误的!!!而基于特殊字符的位置信息,是正确的,我们只需要对特殊字符进行判定即可。

  • 相关阅读:
    What is "Type" in managed heap?
    SQL Server 2005:一个使用新创建的User的问题和解决方法
    如何证明Application Domain的隔离性
    我的WCF之旅(10):如何在WCF进行Exception Handling
    SQLXML初体验:用XML代替TSQL来操作数据库
    我的WCF之旅(3):在WCF中实现双工通信
    我的WCF之旅(4):WCF中的序列化[下篇]
    再说String
    谈谈基于Kerberos的Windows Network Authentication[上篇]
    我所理解的Remoting(1):Marshaling & Activation[上篇]
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/12580266.html
Copyright © 2020-2023  润新知