您的位置:首页 > Web前端

剑指offer第53题:表示数值的字符串

2019-08-25 15:27 344 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_42847793/article/details/100033220

剑指offer第53题:表示数值的字符串

  • 源码
  • 题目描述

    表示数值的字符串

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

    源码

    class Solution {
    public:
    bool isConNum(char str[],int l,int r)//判断为是否为不带符号的数字
    {
    
    for(int i=l;i<=r;i++)
    {
    if(str[i]<'0' || str[i]>'9')
    return false;
    }
    return true;
    }
    bool isPositiveInteger(char str[],int l,int r)//判断是否为正整数或零
    {
    if(l == r )
    {
    if(str[l]>='0' && str[l]<='9') return true;
    return false;
    }
    if(str[l] == '+')
    {
    return isConNum(str,l+1,r);
    }
    else
    {
    return isConNum(str,l,r);
    }
    
    }
    bool isNegativeInteger(char str[],int l,int r)//判断是否为负整数
    {
    
    if(str[l] == '-')
    {
    return isConNum(str,l+1,r);
    }
    return false;
    }
    bool isInteger(char str[],int l,int r)
    {
    
    return isPositiveInteger(str,l,r) ||isNegativeInteger(str,l,r);
    
    }
    bool isSmallNumber(char str[],int l ,int r)//判断是否是为小数
    {
    int ind_point = 0;//记录第一个小数点出现的位置;
    for(int i = l;i<=r;i++)
    {
    if(str[i]=='.')
    {
    ind_point = i;
    break;
    }
    }
    if(ind_point == l || ind_point == r)//若小数点出现在首尾,则不是小数
    {
    return  false;
    }
    //若出现在字符串中间,则判断其左侧是否为整数且右侧为不带符号的整数。
    return isInteger(str,l,ind_point-1)&&isConNum(str,ind_point+1,r);
    }
    bool isFE(char str[],int l,int r)
    {
    int ind_e = 0;
    for(int i = l;i<= r;i++)
    {
    if(str[i] == 'e'|| str[i] == 'E')
    {
    ind_e = i;
    break;
    }
    }
    if(ind_e == l || ind_e == r)//若e出现在首尾,则不是PE.
    {
    return  false;
    }
    //若e出现在字符串中间,则判断其左侧是否为整数且右侧为整数
    return (isInteger(str,l,ind_e-1)||isSmallNumber(str,l,ind_e-1))&&isInteger(str,ind_e+1,r);
    
    }
    
    bool isNumeric(char* string)
    {
    int size = 0;
    char * p = string;
    while(*p != '\0')
    {
    p++;
    size++;
    }
    if(size == 0) return false;
    return isInteger(string,0,size-1)||isSmallNumber(string,0,size-1)||isFE(string,0,size-1);
    }
    
    };
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: