欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

有效数字

程序员文章站 2022-05-18 17:11:44
...

有效数字

描述

验证给定的字符串是否可以解释为十进制数字。

例如:

“0” => true
" 0.1 " => true
“abc” => false
“1 a” => false
“2e10” => true
" -90e3 " => true
" 1e" => false
“e3” => false
" 6e-1" => true
" 99e2.5 " => false
“53.5e93” => true
" --6 " => false
“-+3” => false
“95a54e53” => false

思路和代码

本题就是判断一个给定的字符串是否是有效的数字。
首先思考一下有效的数字应该是什么样,从头开始,首先去掉左边的空格部分,然后 i 遍历到第一个非空格的字符,若该字符为+或-,也满足条件,继续遍历,若遇到数字或小数点,也继续遍历,直到非数字,非小数点或者结尾出现,这时候判断一下出现的数字个数是不是小于1或者小数点是不是超过1,若是,则返回false。之后是判断是否遇到e,遇到e之后继续判断。

class Solution {
public:
    bool isNumber(string s) {
        int n = s.size();
        if(n == 0)
            return false;

        int i = 0;

        //去掉多余空格
        while(s[i] == ' ')
            i++;
        
        //如果是加减号,也满足条件
        if(s[i] == '+' || s[i] == '-')
            i++;
        
        //遍历如果是数字或小数点,则继续遍历,直到遇到不是数字或小数点或到了尾部
        int numPoint = 0;
        int numDigit = 0;
        for(; (s[i]>='0' && s[i]<='9') || s[i]=='.'; i++)
        {
            if(s[i] == '.')
                numPoint++;
            else
                numDigit++;
        }
        if(numPoint > 1 || numDigit < 1)//判断小数点个数和数字个数符不符合条件
            return false;
        
        //遇到e的情况
        if(s[i] == 'e')
        {
            i++;
            if(s[i] == '+' || s[i] == '-')
                i++;
            numDigit = 0;
            for(; s[i]>='0' && s[i]<='9'; i++, numDigit++);
            if(numDigit < 1)
                return false;
        }
        for(; s[i] == ' '; i++);
        return s[i] == '\0';
    }
};
相关标签: 字符串