zoukankan      html  css  js  c++  java
  • 【剑指Offer-代码的完整性】面试题20:表示数值的字符串

    题目描述

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

    思路

    最复杂的数值表示-123.456e-789(其中-可以替换成+或空,e可以替换为E),可以分为3个部分:整数部分-123、小数部分456、指数部分e-789。首先判断整数部分是否正确(0~9组成的字符串,前面可能会有符号'+'或者'-');如果有小数点的话判断小数部分是否正确(是否是0~9组成的字符串);如果出现e或者E的话,判断指数部分是否正确(类似于判断整数部分)。代码如下:

    class Solution {
    public:
        bool isNumeric(char* string)
        {
            if(string==nullptr)
                return false;
            
            bool numeric = scanInteger(&string);
            if(*string=='.')
            {
                string++;
                numeric = scanUnsigenedInt(&string) || numeric; //注意是'||',因为1.,.1,0.1都对
            }
            if(*string=='e'||*string=='E')
            {
                string++;
                numeric = numeric && scanInteger(&string); //注意是'&&',因为1e, e1都不对
            }
            return numeric && *string=='';
        }
        
        bool scanInteger(char** str)
        {
            if(**str=='+'||**str=='-')
                (*str)++;
            return scanUnsigenedInt(str);
        }
        
        bool scanUnsigenedInt(char** str)
        {
            char* before = *str;
            while(**str!=''&&**str>='0'&&**str<='9')
                (*str)++;
            
            return *str>before; //str移动代表存在0~9组成的字符串
        }
    
    };
    

    指向指针的指针

    上面的代码用到了二级指针**str,也就是指向指针的指针,这里复习一下。假设有一个int型变量a,p1是指向a的指针变量(int* p1 = &a),p2是指向p1的指针变量(int** p2 = &p1)

    如果想要获取指针指向的数据,则一级指针前加一个星号*,二级指针前加两个星号**,如*p1=a,**p2=*(*p2)=*p1=a.
    如果在函数内部对指针的修改想要更新到函数外,一般有3种方法:1、返回更新后的指针;2、将该指针定义为全局变量;3、向函数传入指向该指针的指针(二级指针)。

  • 相关阅读:
    windows环境python2.7安装MySQLdb
    查找文件中除了注释以外的中文
    python2的reload模块
    虚拟机网络连接NAT模式,本地用Xshell连接
    PHP中逻辑运算符的高效用法---&&和||
    mysql 的 alter table 操作性能小提示
    MySQL优化指南
    UTF-8的BOM含义
    MySQL中 指定字段排序函数field()的用法
    MySQL PROFILE 跟踪语句各阶段性能开销
  • 原文地址:https://www.cnblogs.com/flix/p/12445869.html
Copyright © 2011-2022 走看看