表示数值的字符串

题目描述

  请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
  思路:小数点或者前面有一个整型,或者后面有一个无符号整型,或者两者都有;e或E前面必须有一个整型或小数,后面必须有一个整型。
class Solution {
public:
    bool scanUInt(char *string, int &idx)//匹配无符号整型
    {
        int tmp=idx;
        while(string[idx]>='0' && string[idx]<='9')++idx;
        return idx>tmp;
    }
    bool scanInt(char *string, int &idx)//匹配带符号(+或-)的整型
    {
        if(string[idx]=='+' || string[idx]=='-')++idx;
        return scanUInt(string, idx);
    }
    bool isNumeric(char* string)
    {
        if(string==NULL)return false;
        int idx=0;
        bool res=scanInt(string, idx);
        if(string[idx]=='.')
        {
            ++idx;
            res=scanUInt(string, idx) || res;//小心短路运算
        }
        if(string[idx]=='e' || string[idx]=='E')
        {
            ++idx;
            res=scanInt(string, idx) && res;
        }
        return res && string[idx]=='\0';
    }
};

 

posted @ 2017-12-22 20:59  jeysin  阅读(131)  评论(0编辑  收藏  举报