美文网首页
面试题20:表示数值的字符串

面试题20:表示数值的字符串

作者: 潘雪雯 | 来源:发表于2020-05-12 11:55 被阅读0次

题目

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

解题思路

表示数值的字符串遵循模式A[.[B]][e|EC].B[e|EC]。其中A作为数值的整数部分,B紧跟着小数点为数值的小数部分,C紧跟着‘e’或‘E’为数值的指数部分,在小数里可能没有数值的小数部分。A部分不是必需的,若一个数没有整数部分,那它的小数部分不能为空。
规则:A和C都是可能以‘+’或者‘-’开头的09的数位串;B也是09的数位串,但前面不能有正负号。

  1. 先判断‘+’或‘-’的位置,是否在首部或者在e/E的后面。
  2. 判断小数点的位置,是否在开头或结尾,是否出现多次,是否出现在e/E的后面。
  3. 判断e/E的位置,e/E是否出现,出现的次数,是否位于字符串开头或结尾。
  4. 判断字符串中的字符是否处于0~9之间。

代码

class Solution{
 public:
    
    bool stringTonum(char *str)
    {
        if(str == NULL)
        {
            return false;
        }
        
        bool isNumber = true;
        int stringLen = strlen(str);
        int dot = 0;//小数点出现
        int E_or_e = 0;
        bool is_E_or_e = false;//是否出现E/e

        for(int i = 0;i<stringLen;i++)
        {
            if(str[i] == '+' || str[i] == '-')
            {
                if(i == 0) //加号和减号放在开头
                {

                }
                else 
                {
                    if(str[i-1] == 'E' || str[i-1] == 'e')
                    {
                        if(i == stringLen-1)
                        {
                            isNumber = false;
                            break;
                        }
                    }
                    else
                    {
                        isNumber = false;
                        break;
                    }
                }
            }
            else if(str[i] == '.')
            {
                if(i == 0)
                {
                    
                }
                else if(i == stringLen-1)
                {
                    isNumber = false;
                    break;
                }
                dot++;
                if(dot>1)
                {
                    isNumber = false;
                    break;
                }
                if(is_E_or_e)
                {
                    isNumber = false;
                    break;
                }
            }
            else if(str[i] == 'E' || str[i] == 'e')
            {
                is_E_or_e = true;
                E_or_e++;
                if(E_or_e > 1)
                {
                    isNumber = false;
                    break;
                }
                if(i == stringLen-1)
                {
                    isNumber = false;
                    break;
                }
            }
            else
            {
                if(str[i] >='1' && str[i] <= '9')
                {

                }
                else
                {
                    isNumber = false;
                    break;
                }
            }
        }
        return isNumber;
    }
};

完整代码见Github

相关文章

网友评论

      本文标题:面试题20:表示数值的字符串

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