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?

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

  • 相关阅读:
    回溯法---哈密顿回路(5)
    回溯法---n皇后问题(4)
    回溯法---n-着色问题(3)
    回溯法--算法框架(2)
    创建二叉树的所有深度上的节点链表
    笔试
    笔试 (2)
    LeetCode278-第一个错误的版本(二分查找)
    LeetCode46-全排列(递归)
    LeetCode258-各位相加(猜想公式)
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11242332.html
Copyright © 2011-2022 走看看