• 53、剑指offer--表示数值的字符串


    题目描述
    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
     
    解题思路:
    1)先判断第一位是不是符号位,是符号位后移一位
    2)扫描0-9的数字位,后移一位
    3)判断是否遇到‘.’,如果是,跳过小数点,继续扫描0-9  如果遇到‘e’或'E'判断是否符合科学计数法规则
    4)不是小数,遇到‘e’或'E'判断是否符合科学计数法规则
    5)否则,返回false
    判断是否符合科学计数法规则:移到e或E的下一位,判断符号,扫描0-9,如果为‘’则为真,否则为假
     1 class Solution {
     2 public:
     3     void scanDights(char **string)
     4     {
     5         while(**string !='' && **string >= '0' && **string <= '9')
     6             ++(*string);
     7     }
     8     bool isExponential(char **string)
     9     {
    10         if(**string != 'e' && **string != 'E')//注意此处是&&
    11             return false;
    12         ++(*string);
    13         if(**string == '+' || **string == '-')
    14             ++(*string);
    15         if(**string == '')
    16             return false;
    17         scanDights(string);
    18         return (**string == '') ? true: false;
    19     }
    20     bool isNumeric(char* string)
    21     {
    22         if(string == NULL)
    23             return false;
    24         if(*string == '+' || *string == '-')
    25             string++;
    26         if(*string == '')
    27             return false;
    28         bool numeric = true;
    29         scanDights(&string);
    30         if(*string != '')
    31         {
    32             //浮点型处理
    33             if(*string == '.')
    34             {
    35                 ++string;
    36                 scanDights(&string);
    37                 //科学计数法处理
    38                 if(*string == 'e' || *string == 'E')
    39                 {
    40                     numeric = isExponential(&string);
    41                 }
    42             }
    43             //不是浮点型
    44             else if(*string == 'e' || *string == 'E')
    45             {
    46                 numeric = isExponential(&string);
    47             }
    48             else
    49                 numeric = false;
    50         }
    51         return numeric && *string == '';
    52     }
    53 };
  • 相关阅读:
    AspNet WebApi 中应用fo-dicom抛出异常:No codec registered for tranfer syntax:
    Codeforces Round #261 (Div. 2)459A. Pashmak and Garden(数学题)
    Android开发之使用Web Service进行网络编程
    线段树 + 扫描线加深具体解释
    对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)
    lscript.ld 链接器脚本
    iOS 系统地图实现及定位
    Perl怎样过滤html标签
    hdu1213 How Many Tables(并查集)
    数据结构——链表
  • 原文地址:https://www.cnblogs.com/qqky/p/7095173.html
Copyright © 2020-2023  润新知