剑指offer之【表示数值的字符串】

题目:

  表示数值的字符串

链接:

  https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?tpId=13&tqId=11206&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述:

  请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

思路:

  表示数值的字符创应该符合以下模式:

  【正负号】数字【.【分数数字】】【e|E【指数正负号】指数数字】 。

                 其中【表示这里的内容可有可无】

代码:

  

 1 /*************************************************************************
 2     > File Name: jz54.cpp
 3     > Author: wangshujing 
 4     > Mail: wangshujingu@163.com
 5     > Created Time: Fri 09 Jun 2017 10:47:19 AM CST
 6  ************************************************************************/
 7 
 8 // 剑指offer 第 54 题:表示数值的字符串
 9 
10 #include<iostream>
11 using namespace std;
12 class Solution{
13 public:
14     bool isNumeric(char* string){
15         if(string == nullptr){
16             return false;
17         }
18         if(*string == '+' || *string == '-')
19             ++string;
20         if(*string == '\0'){
21             return false;
22         }
23 
24         bool numeric = true;
25 
26         scanDigits(&string);
27         if (*string != '\0'){
28             // for floats;
29             if(*string == '.'){
30                 ++string;
31                 scanDigits(&string);
32                 if(*string == 'e' || *string == 'E')
33                     numeric = isExponential(&string);
34             }
35             // for integers;
36             else if(*string =='e' || *string == 'E')
37                 numeric = isExponential(&string);
38             else
39                 numeric = false;
40         }
41         return numeric && *string == '\0';
42     }
43     void scanDigits(char** string){
44         while(**string != '\0' && **string >= '0' && **string <= '9')
45             ++(*string);
46     }
47     bool isExponential(char** string){
48         if(**string != 'e' && **string != 'E')
49             return false;
50         ++(*string);
51         if(**string == '+' || **string == '-'){
52             ++(*string);
53         }
54         if(**string == '\0')
55             return false;
56         scanDigits(string);
57         return (**string == '\0')? true:false;
58     }
59 };
60 
61 int main(){
62     char num[] = "1.2.3";
63     Solution a;
64     bool out = a.isNumeric(num);
65     if(out)
66         cout<<"是数字!"<<endl;
67     else
68         cout<<"不是数字!"<<endl;
69     return 0;
70 }

 

posted @ 2017-06-09 12:04  我是畅游海  阅读(187)  评论(0编辑  收藏  举报