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

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M

    题目描述

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

    思路:

    设立三个flag:sign,decimal,hasE,分别来标记符号位、小数点、e是否出现
    本题涉及到的条件很多,比如第一次出现+-号,且不是在字符串开头,后面要紧跟e,不然,就不符合要求;所以一定要确定+-、.、e三者在本题中何种情况是符合条件的

    class Solution {
    public:
        bool isNumeric(char* string)
        {
            //标记符号 小数点 e是否出现
            bool sign = false,decimal = false,hasE = false;
            for(int i =0;i < strlen(string);i++)
            {
                if(string[i] == 'e' || string[i] == 'E')
                {
                    if(i == strlen(string)-1) return false;
                    if(hasE) return false;
                    hasE = true;
                }
                else if(string[i] == '+' || string[i] == '-')
                {
                    //第二次出现+-符号,则必须要紧贴e之后
                    if(sign && string[i-1] != 'e' && string[i-1] != 'E')return false;
                    //第一次出现+-符号,且不是在字符串开头,则也必须紧贴e之后
                    if(!sign && i > 0 && string[i-1]!='e' && string[i-1] != 'E') return false;
                    sign = true;
                }
                else if(string[i] == '.')
                {
                    //e后面不能直接接小数点,小数点不能出现两次
                    if(hasE || decimal) return false;
                    decimal = true;
                }
                else if(string[i]<'0' || string[i]>'9')
                    return false;
            }
            return true;
        }
    
    };
    
  • 相关阅读:
    Codeforces461E Appleman and a Game 做题心得
    关于贪心问题的处理
    各种容斥 笔记
    博弈论 笔记
    家庭多个路由器组网方案(AP+AC)
    21.06.06 训练赛
    Redirect...
    Web Api实践系列(三)route特性使用
    《Red Tuner》隐私政策
    前缀和-1915. 最美子字符串的数目
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12656727.html
Copyright © 2011-2022 走看看