剑指Offer-表示数值的字符串

题目描述 [表示数值的字符串]

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

解题思路

考虑全面即可

  • E后面一定是数字并且不能同时出现两个E
  • 不能出现两个小数点 并且小数点不能出现在E后面
  • 如果符号第二次出现,则符号前面的字符一定是E (-1E-16)
  • 如果符号是第一次出现并且不是在第一位,那么符号前面的字符也一定是E (5e+2)

代码

class Solution {
public:
    bool isNumeric(char* string) {
        bool sign=false, dot=false, hasE=false;
        int i=0;
        while(string[i]!='\0'){
            if(string[i]=='e' || string[i]=='E'){
                if(hasE || string[i+1]=='\0') return false;
                hasE = true;
            }else if(string[i]=='.'){
                if(dot || hasE) return false;
                dot = true;
            }else if(string[i]=='+' || string[i]=='-'){
                if(sign && string[i-1]!='E' && string[i-1]!='e') return false;
                if(!sign && i>0 && string[i-1]!='E' && string[i-1]!='e') return false;
                sign = true;
            }else if(!isdigit(string[i])) return false;
            i++;
        }
        return true;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容