首页 > 其他 > 详细

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

时间:2017-06-09 12:19:08      阅读:357      评论:0      收藏:0      [点我收藏+]

题目:

  表示数值的字符串

链接:

  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 }

 

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

原文:http://www.cnblogs.com/wangshujing/p/6971398.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!