首页 > 试题广场 >

表示数值的字符串

[编程题]表示数值的字符串
  • 热度指数:66897 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。

科学计数法的数字(按顺序)可以分成以下几个部分:
1.若干空格
2.一个整数或者小数
3.(可选)一个 'e' 或 'E' ,后面跟着一个整数(可正可负)
4.若干空格

小数(按顺序)可以分成以下几个部分:
1.若干空格
2.(可选)一个符号字符('+' 或 '-')
3. 可能是以下描述格式之一:
3.1 至少一位数字,后面跟着一个点 '.'
3.2 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
3.3 一个点 '.' ,后面跟着至少一位数字
4.若干空格

整数(按顺序)可以分成以下几个部分:
1.若干空格
2.(可选)一个符号字符('+''-')
3. 至少一位数字
4.若干空格


例如,字符串["+100","5e2","-123","3.1416","-1E-16"]都表示数值。
但是["12e","1a3.14","1.2.3","+-5","12e+4.3"]都不是数值。

提示:
1.1 <= str.length <= 25
2.str 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,空格 ' ' 或者点 '.' 。
3.如果怀疑用例是不是能表示为数值的,可以使用python的print(float(str))去查看
进阶:时间复杂度,空间复杂度

示例1

输入

"123.45e+6"

输出

true
示例2

输入

"1.2.3"

输出

false
示例3

输入

"."

输出

false
示例4

输入

"    .2  "

输出

true
function isNumeric( str ) {
    // write code here 
    let numFlag=false,dotFlag=false,eFlag=false;
    str = str.trim()
    for(let i=0;i<str.length;i++){
        if(str[i]>='0'&&str[i]<='9'){
            numFlag=true
        }else if(str[i]==='.'&& !dotFlag && !eFlag){
            dotFlag=true
        }else if((str[i]==='e'||str[i]==='E') && !eFlag && numFlag){
            eFlag=true
            numFlag=false
        }else if((str[i]==='+'||str[i]==='-') && (i===0 || str[i-1]==='e' ||str[i-1]==='E')){
            
        }else{
            return false
        }
    }
    return numFlag
}

发表于 2022-05-18 21:50:45 回复(0)

只管写代码,其他的都交给布兰登艾奇

function isNumeric( str ) {
    // write code here
    return +str == str && str.trim() !== ''
}
发表于 2022-03-08 00:01:45 回复(0)
function isNumeric( str ) {
    // write code here

    str=str.trim()
    if(str=='0')return true
    if(str.length==0)return false
    if(str[0]=='.'||str[0]=='+'||str[0]=='-'){ 
        if(str.length==1)
            return false
        else{
            return /(^(\d+)(\.\d+)?(e|E(\+|\-)?\d+)?$)|(^(\d*)(\.\d+)$)/.test(str.slice(1)) 
            }
    }
    return /^\d+(\.\d*)?((e|E)(\+|\-)?\d+)?$/.test(str)
    
}
module.exports = {
    isNumeric : isNumeric
};
发表于 2022-03-02 17:25:25 回复(0)
直接调用isNaN函数,将空格(Number(空格)==0)单独处理,
function isNumeric( str ) {
    // write code here
    if(str == ' '){
        return false;
    }else{
        return !isNaN(str);
    }
    
}


发表于 2021-09-18 15:19:20 回复(0)
function isNumeric( str ) {
    // write code here
    let reg=/^[+-]?\d*\.?\d+([eE][+-]?\d+)?$/g;
    return reg.test(str)
}
正则表达式
发表于 2021-06-21 12:47:11 回复(0)
使用正则表达式,考虑  .3和3.  的情况
function isNumeric( str ) {
    // write code here
    let res = /^[+-]?([0-9]*\.[0-9]+|[0-9]+(\.[0-9]*)?)([Ee][+-]?[0-9]+)?$/;
    return res.test(str);
}


编辑于 2021-04-03 09:26:52 回复(0)