53、表示数值的字符串

来源:互联网 发布:美团程序员工资待遇 编辑:程序博客网 时间:2024/05/16 14:23

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

思路:按照正常顺序分析,中间几个if else 之间的关系需要注意

代码:

class Solution {public: bool isNumeric(char* string) {    if (string == NULL)        return false;    if (*string == '+' || *string == '-')        string++;    if (*string == '\0')        return false;    scanDigits(&string);//传入参数为对指针的引用,函数参数是指向指针的指针    int numeric = true;    //如果仅仅是一个数字,不进下面的if直接返回true    if (*string != '\0') {        if (*string == '.') {            string++;//之前把这句给落下了,坑啊            scanDigits(&string);            if (*string == 'e' || *string == 'E') {                             numeric = isExponential(&string);             }        }        else if (*string == 'e' || *string == 'E') {            numeric = isExponential(&string);        }        else {            numeric = false;        }    }    return numeric && *string == '\0';//保证结尾没有别的东西}//scanDigits负责扫描字符串中0~9的数位void scanDigits(char** string) {    while (**string != '\0' && **string >= '0' && **string <= '9')        (*string)++;}//isExponential负责匹配科学计数法表示的数值的结尾部分bool isExponential(char** string) {    if (**string != 'e' && **string != 'E')        return false;    (*string)++;    if (**string == '+' || **string == '-')        (*string)++;    if (**string == '\0')        return false;    scanDigits(string);    return (**string == '\0' ? true : false);//保证数字完了没有别的东西了}};
原创粉丝点击