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

表示数值的字符串

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

重要的是掌握判断指向的字符是否为正确的判断条件。1.指针是否越界。 2.编写判断条件。本题主要考察对字符串的编程能力,主要对指针指向的数是否符合条件做判断。

思路:
1.定义一个指针,三个boolean变量 表示三个条件是否满足(A为整数,B为小数,C为指数)
2.根据有效数字写出两个函数分别判断指向的数字是否符合条件
3.判断B和C是否正确
static int i = 0;
public static boolean judgeNumber(String str){
if(str == null || str.length() == 0) return false;

    str.trim();
    boolean A = judgeInteger(str), B = false, C = false;

    //判断是否有B,使用索引时要确保索引不越界
    if(i < str.length() && str.charAt(i) == '.'){
        i++;
        B = unSignedInteger(str);
    }

    //判断是否有C
    if(i < str.length() && (str.charAt(i) =='e' || str.charAt(i) == 'E')){
        i++;
        C = judgeInteger(str);

        if(!C){
            return false;
        }
    }
    //这里说明C是合格的 判断A和B的情况
    //i 必须扫描完str字符串 (A合格则合格,A不合格则B必须合格)
    return i ==str.length() && (A || B);

}

public static boolean judgeInteger(String str){
    if(i < str.length() && (str.charAt(i) == '+' || str.charAt(i) == '-')){
         i++;
    }
    return unSignedInteger(str);
}

public static boolean unSignedInteger(String str){
    int start = i;
    while(i < str.length() && (str.charAt(i) >= '0' && str.charAt(i) <= '9')){
        i++;
    }
    //i > start 证明扫描到数据
    return i > start;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值