zoukankan      html  css  js  c++  java
  • 剑指OFFER 表示数值的字符串

    剑指OFFER 表示数值的字符串

    这道题主要考察的是对"如何表达数字"的理解,如何对这种表示建立一套可行的规则.

    最初我的想法是从头到尾一个字符一个字符进行扫描,并且前面的扫描会对后面的扫描产生影响(出现无效字符就中断),如果扫描全程都没有被中断那么就判断该字符串是有效的.但是这种方法可读性比较差,会掺杂大量的if else 判断.

    为了简化代码和捋清思路,我还是按照传统的方法,将复杂问题分解成小问题的方式来解决.

    增设两个函数

    一个函数判断是否是纯数字

    一个函数判断是否是带小数点的纯数字

    最后根据e/E的位置对字符串进行分解,然后用上述函数分别进行判断,最终得出结果.

    class Solution {
    public:
        //左闭右开
        //第一个字符一定是+或者-或者0~9
        //之后是只带一个小数点的纯数字
        bool is_number(char* str,int left,int right)
        {
            if(str[left]!='+'&&str[left]!='-'&&str[left]<'0'&&str[left]>'9')
                return false;
            int pos = left + 1;
            bool dot = false;
            while(str[pos]>='0'&&str[pos]<='9'&&pos<right||str[pos]=='.')
            {
                if(str[pos]=='.')
                {
                    if(dot == true)return false;
                    dot = true;
                }
                pos++;
            }
            return pos == right;
        }
        //左闭右开
        //第一个字符一定是+或者-或者0~9
        //之后都是纯数字
        bool is_number_without_dot(char* str,int left,int right)
        {
            if(str[left]!='+'&&str[left]!='-'&&str[left]<'0'&&str[left]>'9')
                return false;
            int pos = left + 1;
            while(str[pos]>='0'&&str[pos]<='9'&&pos<right)
            {
                pos++;
            }
            return pos == right;
        }
        
        bool isNumeric(char* str)
        {
            int pos = 0;//最终pos表示str的长度
            int pos_e = -1;//是否存在e/E
            while(str[pos] != '')
            {
                if(str[pos]=='e'||str[pos]=='E')
                {
                    pos_e = pos;
                }
                pos++;
            }
            if(pos_e == -1)
            {
                //如果不是指数形式,那么只需要判断是否是带小数点的数字即可
                return is_number(str,0,pos);
            }else{
                //如果是指数形式
                //那么就分成两半,左边是带小数点的数字,右边是纯数字分别进行判断
                return is_number(str,0,pos_e) && is_number_without_dot(str,pos_e+1,pos);
            }
        }
    };
    
  • 相关阅读:
    Hiho----无间道之并查集
    Linux之压缩与解压
    Linux之用户和用户组
    Linux之关机/重启命令及一些符号
    Linux之基本操作命令
    Linux之vi/vim
    解决eclipse中maven报错Failed to read artifact descriptor for xxxx:jar
    CentOS 7下 solr 单机版安装与配置
    CentOS 7下 Tomcat7 安装与配置
    CentOS 7下 JDK 1.7 安装与配置
  • 原文地址:https://www.cnblogs.com/virgildevil/p/12179101.html
Copyright © 2011-2022 走看看