剑-表示数值的字符

来源:互联网 发布:开源的数据库管理工具 编辑:程序博客网 时间:2024/05/04 17:28

题目:

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

但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

思路:

表示数值的字符串遵循如下模式:

[sign]integral-digits[.[fractional-digit]][e|E[sign]exponential-digits]

说明一下:在数值之前可能有正负符号'+',‘-’;接下来是若干0-9的数位表示数值的整数部分(在某些小数里可能没有整数部分)。

如果数值是一个小数,那么在小数点后面可能会有若干0到9的数位表示数值的小数部分。

如果数值用科学计数法表示,接下来是一个‘e’或‘E’,以及紧跟着一个整数(可以有正负号)表示指数。

判断一个字符串是否满足上述模式,首先看第一个字符是否为正负符号,如果是在字符串往前移动一个字符,继续扫描字符串剩下中0-9的位数,如果是一个小数,则将遇到小数点,如果是科学计数法,在整数或者小数后面可能会遇到‘e’或‘E’.


class Solution {public:    bool isNumeric(char* string)    {        bool numeric=true;       if(string==NULL) return false;        if(*string=='+'||*string=='-') string++;        scannum(&string);                if(*string!='\0'){            if(*string=='.')            {                string++;                scannum(&string);                if(*string=='e'||*string=='E')                    numeric=scane(&string);                            }else if(*string=='e'||*string=='E')            {                numeric=scane(&string);            }            else numeric=false;        }      return numeric && *string=='\0';    }        //判断是否为整数数字0-9。    void scannum(char **string)    {        while((**string!='\0')&&(**string>='0')&&(**string<='9'))            ++(*string);    }    //判断是否为指数表示法    bool scane(char **string)    {        ++(*string);        if(**string=='+'||**string=='-')            ++(*string);        if(**string=='\0') return false;        scannum(string);        return (**string=='\0')?true:false;    }};


0 0
原创粉丝点击