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

    这个题难度并不大,主要考虑几个方面:

    1.正负号位,只能出现一次,只能出现在数字的前面

    2.小数点位,只能出现一次,必须出现在数字的终点

    3.指数为e或E,可以出现在数字之前或者数字之后

    4.称为数字的必要条件是必须包含数字(e和E算不算数组根据题目而定,此时假定不算)

     1 class Solution {
     2 public:
     3     bool isNumeric(char* str)
     4     {
     5         if (str == NULL || str[0] == '')
     6             return false;
     7         int sig = 0;//判断符号位的个数
     8         int num = 0;//数字的个数
     9         int point = 0;//小数点个数
    10 
    11         //先判断空格,跳过空格
    12         while (*str == ' ')
    13             str++;
    14 
    15         //判断符号位
    16         while (*str == '+' || *str == '-')
    17         {
    18             sig++;
    19             str++;
    20             if (sig > 1)
    21             {
    22                 return false;
    23             }
    24         }
    25         //判断数字的个数
    26 
    27         while (*str >= '0' && *str <= '9')
    28         {
    29             num++;
    30             str++;
    31         }
    32         while (*str == '.')//本来我是这样写的,结果那个奇怪的测试用例无法通过,看最下面
    33                            //while (num&&*str == '.')
    34                            //小数点前面必须有数字才是数字这不是很简单的道理吗
    35         {
    36             point++;
    37             str++;
    38             if (sig > 1)
    39             {
    40                 return false;
    41             }
    42         }
    43         while (*str >= '0' && *str <= '9')
    44         {
    45             num++;
    46             str++;
    47         }
    48         if (*str == 'e' || *str == 'E')
    49         {
    50             str++;
    51             {
    52                 sig = 0;
    53                 while (*str == '+' || *str == '-')
    54                 {
    55                     sig++;
    56                     str++;
    57                     if (sig > 1)
    58                     {
    59                         return false;
    60                     }
    61                 }
    62                 //判断数字的个数
    63                 num = 0;
    64                 while (*str >= '0' && *str <= '9')
    65                 {
    66                     num++;
    67                     str++;
    68                 }
    69                 if (num == 0)//e的后面必须有数字
    70                     return false;
    71                 if (*str == '')
    72                     return true;
    73                 else
    74                 {
    75                     return false;
    76                 }
    77             }
    78         }
    79         else
    80             if (*str == ''&&num)                                                     //必须有数字才是数字
    81                 return true;
    82             else
    83             {
    84                 return false;
    85             }
    86         
    87     }
    88 
    89 };

    有一个测试用例是“-.123”,样例输出竟然是true?

    这算是数字吗,牛客网到底是怎么想的,小数点的前面没有数字也可以吗?

  • 相关阅读:
    使用Oracle PROFILE控制会话空闲时间
    ORACLE sid,pid,spid总结
    总结:基于Oracle Logminer数据同步
    从操作系统rm数据文件后,利用句柄与rman恢复的过程。(已验证)
    SPOJ GCDEX (数论)
    C++类构造函数
    [置顶] 删除:大数据取舍之道读书笔记
    paip.c++ qt 图片处理 检测损坏的图片
    paip.c++ qt 目录遍历以及文件操作
    AJAX最简单的原理以及应用
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11242332.html
Copyright © 2011-2022 走看看