剑指Offer-20:表示数值的字符串
2018-01-05 12:00
459 查看
题目:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例子
例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。链接:
剑指Offer(第2版):P127思路标签:
字符串匹配解答:
1. C++
主要考察对问题分析的全面性;表示数值的字符串遵循模式:A[.[B]][e|EC]或者.B[e|EC]表示,其中A和C都是整数(可以有正负号,也可以没有),而B是一个无符号整数。
判断小数和整数部分用‘||’来判断:如:.123、233.、233.123这三个均为数值;(这里需要注意的是,使用‘||’要将
scanUnsignedInteger()放在前面,因为如果numeric放在前面,numeric为真,
scanUnsignedInteger()函数便不再执行,导致出错)
判断小数和指数部分用‘&&’,因为e或者E前面都需要有数字。
最后用字符串为空和前面的数字部分的‘&&’ 来防止指数出现小数或其他的情况。
class Solution { public: bool isNumeric(char* string) { if (string == nullptr) return false; bool numeric = scanInteger(&string); if (*string == '.') { ++string; numeric = scanUnsignedInteger(&string) || numeric; } if (*string == 'e' || *string == 'E') { ++string; numeric = numeric && scanInteger(&string); } return numeric && *string == '\0'; } bool scanInteger(char** string) { if (**string == '+' || **string == '-') ++(*string); return scanUnsignedInteger(string); } bool scanUnsignedInteger(char** string) { char* before = *string; while (**string != '\0' && **string >= '0' && **string <= '9') ++(*string); return *string > before; } };
因为在判断的过程中,涉及到了指针的变换,所以在函数传递的中需要使用指针的引用:&string,且子函数的参数为指针的指针:char** string。
相关文章推荐
- 剑指offer--面试题20:表示数值的字符串
- 剑指Offer 面试题20:表示数值的字符串 Java代码实现
- 【剑指offer】面试题20:表示数值的字符串
- 剑指offer-----判断字符串是否表示数值(java版)
- 剑指20:表示数值的字符串
- 剑指offer-面试题54-表示数值的字符串
- 剑指offer(56):表示数值的字符串
- 剑指offer:表示数值的字符串
- 【剑指**】20.表示数值的字符串
- 剑指offer——表示数值的字符串(好题)(了解下库函数和正则)
- 剑指offer(50)-表示数值的字符串
- 剑指offer——53.表示数值的字符串
- 剑指offer:表示数值的字符串
- 剑指offer 表示数值的字符串
- 剑指Offer面试题54:表示数值的字符串
- 剑指offer54 表示数值的字符串
- 剑指offer-表示数值的字符串
- 剑指Offer——表示数值的字符串
- 【剑指offer-解题系列(53)】表示数值的字符串
- 剑指offer--表示数值的字符串