• 【leetcode】Valid Number


    Valid Number

    Validate if a given string is numeric.

    Some examples:
    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true

    Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

    其他测试用例:

    " "    false
    "3."  true
    "e"   false
    "."    false
    "3. " true
    "46.e3" true
    " 005047e+6" true
    "6+1" false
     
     
    1.符号 后面只能跟 数字,点
    2.点 后面只能跟 数字,空格,指数e
    3.指数 后面只能跟 数字,符号
    4.空格只能位于开头或结尾,去除开头的空格后,空格后面只能接空格(必须位于末尾)
    5.去除开头的符号后,符号只能位于指数e之后,且只能出现一次
    6.点只能出现一次,且不能位于指数之后
    7.指数只能出现一次,且前面需要有数字
    8.符号,指数,单独的点,不能做结尾
     
     1 class Solution {
     2 public:
     3  
     4     enum TYPE
     5     {
     6         INVALID,
     7         SPACE,
     8         SIGN,
     9         DIGIT,
    10         DOT,
    11         EXP
    12     };
    13    
    14     bool isNumber(const char *s) {
    15        
    16         while(*s!=''&&*s==' ') s++;
    17         if(*s=='+'||*s=='-') s++;
    18  
    19        
    20         if(strlen(s)==0) return false;
    21        
    22         bool hasSign=false;
    23         bool hasDigit=false;
    24         bool hasDot=false;
    25         bool hasExp=false;
    26        
    27         TYPE preType;
    28         TYPE type;
    29         while(*s!='')
    30         {
    31             type=getType(s);
    32            
    33             if(type==INVALID) return false;
    34            
    35             if(preType==SIGN &&(type!=DIGIT&&type!=DOT)) return false;
    36             if(preType==DOT&&(type!=DIGIT&&type!=SPACE&&type!=EXP))return false;
    37             if(preType==EXP&&(type!=DIGIT&&type!=SIGN))return false;
    38             if(preType==SPACE&&type!=SPACE)return false;
    39            
    40            
    41             switch(type)
    42             {
    43                 case SPACE:
    44                     preType=SPACE;
    45                     break;
    46                 case SIGN:
    47                     if(hasSign) return false;
    48                     else
    49                     {
    50                         if(preType!=EXP) return false;
    51                         hasSign=true;
    52                         preType=SIGN;
    53                     }
    54                     break;
    55                 case DIGIT:
    56                     hasDigit=true;
    57                     preType=DIGIT;
    58                     break;
    59                 case DOT:
    60                     if(hasDot||hasExp) return false;
    61                     else
    62                     {
    63                         hasDot=true;
    64                         preType=DOT;
    65                     }
    66                     break;
    67                 case EXP:
    68                     if(hasExp||!hasDigit) return false;
    69                     else
    70                     {
    71                         hasExp=true;
    72                         preType=EXP;
    73                     }
    74                     break;
    75             }
    76             s++;
    77         }
    78        
    79         if(preType==SIGN||preType==EXP||(!hasDigit&&hasDot)) return false;
    80        
    81         return true;
    82     }
    83    
    84    
    85     TYPE getType(const char *s)
    86     {
    87         if(*s==' ') return SPACE;
    88         else if(*s=='+'||*s=='-') return SIGN;
    89         else if(isdigit(*s))return DIGIT;
    90         else if(*s=='.')return DOT;
    91         else if(*s=='e')return EXP;
    92         else return INVALID;
    93     }
    94 };
  • 相关阅读:
    Arrays常用方法
    一篇很好的java异常框架讲解
    python网络数据采集(低音曲)
    python网络数据采集(伴奏曲)
    记一次python的一些参数
    webshell 生成工具 b374k
    c/s与b/s 动态网站与静态网站 (网站编码统一“UTF-8”)
    RED_HAWK:基于PHP实现的信息收集与SQL注入漏洞扫描工具
    CVE-2017-8464复现 (远程快捷方式漏洞)
    cobaltstrike安装加破解教程+使用教程
  • 原文地址:https://www.cnblogs.com/reachteam/p/4237508.html
Copyright © 2020-2023  润新知