zoukankan      html  css  js  c++  java
  • 剑指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 == ''){
    21             return false;
    22         }
    23 
    24         bool numeric = true;
    25 
    26         scanDigits(&string);
    27         if (*string != ''){
    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 == '';
    42     }
    43     void scanDigits(char** string){
    44         while(**string != '' && **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 == '')
    55             return false;
    56         scanDigits(string);
    57         return (**string == '')? 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 }
  • 相关阅读:
    网卡工作状态检测
    Soap/Web Service执行效率的思考
    Soap/Web Service执行效率的思考
    判断一个字符是否为汉字的最佳方法[转]
    Kafka数据可靠性深度解读
    HTTP 5XX代码理解
    图解:原来这就是网络
    架构设计原则
    Kafka
    Nginx 之 proxy_pass详解
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6971398.html
Copyright © 2011-2022 走看看