剑指Offer---表示数值的字符串
来源:互联网 发布:优惠券源码 编辑:程序博客网 时间:2024/05/29 17:00
【题目】
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串 “+100”, “5e2”, “-123”, “3.1416”和 “-1E-16”都表示数值。 但是 “12e”, “1a3.14”, “1.2.3”, “+-5”和 “12e+4.3”都不是。
【基本思路】
字符串应满足通式A[.[B]][e|EC],或者.B[e|EC]。其中,A、C表示有(或无)符号位的数字,B表示无符号位的数字。在小数里可能没有整数部分。例如:.123等于0.123。因此,A部分不是必须的。如果一个数没有整数部分,那么它的小数部分不能为空。
遍历字符串,首先找到满足条件的A部分(可能不存在);如果遇到 ‘.’,则开始寻找满足条件的B部分。如果遇到 ‘e’或者 ‘E’,则开始寻找满足条件的C部分。如果前面的部分能组成数字,最后判断字符串是否已经到达结尾即可。
【代码实现】
class Solution {public: bool isNumeric(char* string) { if(string == nullptr){ return false; } bool isNum = scanInteger(&string); if(*string == '.'){ string++; //为什么用||? //1、小数可以没有整数部分,如:.123等于0.123 //2、小数点后面可以没有数字,如:233.等于233.0 //3、小数点前面后面可能都有数字,如:123.123 isNum = scanUnsignedInteger(&string) || isNum; //位置不可变,否则scanUnsignedInteger不执行 } if(*string == 'e' || *string == 'E'){ string++; //为什么用&& //1、当e或E前面没有整数时,该字符串不能表示数字,如:.e1、e1 //2、当e或E后面没有整数时,该字符串不能表示数字,如:12e、12e+5.4 isNum = isNum && scanInteger(&string); } return isNum && *string == '\0'; } bool scanUnsignedInteger(char** str){ char* before = *str; while(**str != '\0' && **str >= '0' && **str <= '9'){ (*str)++; } return *str > before; } bool scanInteger(char** str){ if(**str == '+' || **str == '-'){ (*str)++; } return scanUnsignedInteger(str); }};
阅读全文
1 0
- 剑指offer--表示数值的字符串
- 剑指offer 54-表示数值的字符串
- 《剑指offer》表示数值的字符串
- 剑指offer—表示数值的字符串
- 剑指offer:表示数值的字符串
- 剑指Offer--054-表示数值的字符串
- 《剑指offer》:[54]表示数值的字符串
- 剑指offer-表示数值的字符串
- 《剑指offer》-表示数值的字符串
- 剑指offer 表示数值的字符串
- 剑指offer-53.表示数值的字符串
- 剑指offer:表示数值的字符串
- 剑指Offer:表示数值的字符串
- 剑指offer--表示数值的字符串
- 剑指offer--表示数值的字符串
- 剑指offer:表示数值的字符串
- 剑指Offer---表示数值的字符串
- 【剑指Offer学习】【面试题54:表示数值的字符串】
- 手机软件APP积累
- python3入门与进阶(一)
- 专家预言 2040 年,机器将代替人类编写代码!程序员要下架啦?
- 博客报到
- 397. Longest Increasing Continuous Subsequence
- 剑指Offer---表示数值的字符串
- 大数据揭秘:低学历成功逆袭概率多少?结果令人震惊!
- 决策树详解
- python数据类型之初识Set(集合)
- c中指针数组与数组指针的区别
- 老司机,滴~让你赚5-50不等红包的机会,截止到圣诞节结束
- java热加载
- 10.4
- Spark操作MySQL数据库