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

2018-12-27  本文已影响0人  灰化肥发黑会挥发

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”。

解题思路:表示数值的字符串的模式为A[.[B]][e|EC].[B][e|EC],其中A可能为以'+|-'开头的整数,B为整数,C与A相同。在判断一个字符串是否符合上述表达式的时候,首先从头到尾扫描字符串,先判断A,在遇到小数点以后,再开始判断B,在碰到e或者E的时候,开始判断C。

public class Numeric {
    int index = 0;
    public boolean isNumeric(char[] str){
        if(str==null) return false;
        boolean numermic = scanInteger(str,index);
        if(str[index]=='.'){
            index++;
            numermic = scanUnsigendInteger(str,index)||numermic;
        }
        if(str[index]=='e'||str[index]=='E'){
            index++;
            numermic = numermic&&scanInteger(str,index);
        }
        if(index==str.length) return numermic;
        else return false;
    }

    public boolean scanInteger(char[] str,int index){
        if(str[index]=='+'||str[index]=='-'){
            index++;
        }
        return scanUnsigendInteger(str ,index);
    }
    public boolean scanUnsigendInteger(char[] str,int index){
        int firstIndex = index;
        while(str[index]>='0'&&str[index]<='9')
            index++;
        return index>firstIndex;
    }
}

上一篇下一篇

猜你喜欢

热点阅读