zoukankan      html  css  js  c++  java
  • 剑指offer——面试题20:表示数值的字符串

     1 #include"iostream"
     2 using namespace std;
     3 
     4 bool IsInt(const char **str);
     5 bool IsUnsignInt(const char **str);
     6 
     7 bool IsNumeric(const char* str)
     8 {
     9     if(str==nullptr)
    10         return false;
    11     bool flagNumeric=IsInt(&str);//二阶指针才能保留更改
    12 
    13     if(*str=='.')
    14     {
    15         str++;
    16         flagNumeric=IsUnsignInt(&str)||flagNumeric;//要把flagNumeric放后面
    17     }
    18     if(*str=='E'||*str=='e')
    19     {
    20         str++;
    21         flagNumeric=flagNumeric&&IsInt(&str);
    22     }
    23     return flagNumeric&&*str=='';
    24 }
    25 
    26 bool IsInt(const char **str)//确保*str的内容不被修改
    27 {
    28     if(**str=='+'||**str=='-')
    29         (*str)++;
    30     return IsUnsignInt(str);
    31 }
    32 
    33 bool IsUnsignInt(const char **str)
    34 {
    35     int numLength=0;
    36     while(**str!=''&&**str>='0'&&**str<='9')
    37     {
    38      //   cout<<**str;
    39         (*str)++;
    40         numLength++;
    41     }
    42  //   cout<<**str;
    43     return numLength>0?true:false;
    44 }
    45 
    46 // ====================测试代码====================
    47 void Test(const char* testName, const char* str, bool expected)
    48 {
    49     if(testName != nullptr)
    50         printf("%s begins: ", testName);
    51 
    52     if(IsNumeric(str) == expected)
    53         printf("Passed.
    ");
    54     else
    55         printf("FAILED.
    ");
    56 }
    57 
    58 
    59 int main()
    60 {
    61     Test("Test1", "100", true);
    62     Test("Test2", "123.45e+6", true);
    63 
    64     Test("Test3", "+500", true);
    65     Test("Test4", "5e2", true);
    66     Test("Test5", "3.1416", true);
    67     Test("Test6", "600.", true);
    68     Test("Test7", "-.123", true);
    69     Test("Test8", "-1E-16", true);
    70     Test("Test9", "1.79769313486232E+308", true);
    71 
    72     printf("
    
    ");
    73 
    74     Test("Test10", "12e", false);
    75     Test("Test11", "1a3.14", false);
    76     Test("Test12", "1+23", false);
    77     Test("Test13", "1.2.3", false);
    78     Test("Test14", "+-5", false);
    79     Test("Test15", "12e+5.4", false);
    80     Test("Test16", ".", false);
    81     Test("Test17", ".e1", false);
    82     Test("Test18", "e1", false);
    83     Test("Test19", "+.", false);
    84     Test("Test20", "", false);
    85     Test("Test21", nullptr, false);
    86 
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    CH负责内容的两个人——北漂18年(66)
    perl 跨行匹配;
    elk之nginx
    perl 分析binlog 定位错误sql 思路
    rsyslog 日志格式和输出
    rsyslog 定义模板
    rsyslog ~ 波浪号
    过滤器
    rsyslog masg和rawmsg的区别
    金融行业的BI应用分析
  • 原文地址:https://www.cnblogs.com/acm-jing/p/10416692.html
Copyright © 2011-2022 走看看