美文网首页
【剑指 offer】表示数值的字符串。

【剑指 offer】表示数值的字符串。

作者: 邓泽军_3679 | 来源:发表于2019-04-12 09:26 被阅读0次

    1、题目描述

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

    例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。

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

    注意:

    1.小数可以没有整数部分,例如.123等于0.123;
    2.小数点后面可以没有数字,例如233.等于233.0;
    3.小数点前面和后面可以有数字,例如233.666;
    4.当e或E前面没有数字时,整个字符串不能表示数字,例如.e1、e1;
    5.当e或E后面没有整数时,整个字符串不能表示数字,例如12e、12e+5.4;

    样例:
    输入: "0"
    输出: true

    2、问题描述:

    判断一个字符串是否表示的数字。这一个题主要是列举除所有的情况就可以了。

    3、问题关键:

    1.第一步,去掉行首和行尾的空格。
    2.如果行首有一个正负号,那么直接忽略。
    3.此时字符串为空或者后面只有一个 ‘.‘那么就返回false。
    4.遍历字符串。如果数字直接忽略。
    5.‘.'只能出现在‘e’的前面,且’.'和‘e’只能出现1次,否则不合法。
    6.e后面为空,e前面为空,e多于一次,e前面只有一个‘.‘,都不合法。
    7.e后面为正负号,但后面为空。
    8.其他字符,false;
    

    4、C++代码:

    class Solution {
    public:
        bool isNumber(string s) {
            int i = 0;
            while(i < s.size() && s[i] == ' ') i ++; //去掉行首的空格。
            int j = s.size() - 1;
            while(j >= 0 && s[j] == ' ') j --;//去掉行尾的空格。
            if (i > j) return false;
            s = s.substr(i, j - i + 1);
    
            if (s[0] == '-' || s[0] == '+')  s = s.substr(1);//如果行首只有一个正负号,直接忽略。
            if (s.empty() || s[0] == '.' && s.size() == 1) return false;//如果为空或者只有一个'.'不合法。
    
            int dot = 0, e = 0;
            for (int i = 0; i < s.size(); i ++) {//遍历字符串
                if (s[i] >= '0' && s[i] <= '9');
                else if (s[i] == '.') {
                    dot ++;
                    if (e || dot > 1) return false;//如果'.'在'e'后面出现或者dot > 1不合法。
                }
                else if (s[i] == 'e' || s[i] == 'E') {
                    e ++;
                    if (i + 1 == s.size() || !i || e > 1 || i == 1 && s[0] == '.') 
                        return false;//e后面为空;e前面为空;e多于1个;e前面只有一个'.'
                    if (s[i + 1] == '+' || s[i + 1] == '-') {
                        if (i + 2 == s.size()) return false;//e后面跟着正负号,后面为空。
                        i ++;
                    }   
                }
                else return false;
            }
            return true;
        }
    };
    

    相关文章

      网友评论

          本文标题:【剑指 offer】表示数值的字符串。

          本文链接:https://www.haomeiwen.com/subject/nfrqwqtx.html