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

Posted 我是畅游海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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: [email protected]
 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 }

 

以上是关于剑指offer之表示数值的字符串的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer(五十五)之表示数值的字符串

剑指offer之字符串是否为数值

剑指offer--20表示数值的字符串

Java 剑指offer(20) 表示数值的字符串

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

剑指Offer-代码的完整性面试题20:表示数值的字符串