面试题54——表示数值的字符串
2015-08-19 09:56
519 查看
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。解题思路:
这道题没什么别的技巧,按照数值的表示规则,逐个扫描字符串,看是否符合要求。数值有如下几种情况:
1、正负数,首位可以有‘+’ 和 ‘-’ 符号;
2、小数
3、科学计数法,符号‘e’ 或 ‘E’ ,注意 e 或 E 之后只能是整数(可以有正负数)
实现细节见代码
实现代码:
<span style="font-size:18px;"> class Solution { public: bool isNumeric(char* string) { if(string == nullptr) return false; if(*string == '+' || *string == '-') string++; if(*string == '\0') return false; bool isNum = true; scanDigits(&string); if(*string != '\0') { if(*string == '.') { ++string; scanDigits(&string); if(*string == 'e' || *string == 'E') isNum = isExp(&string); } else if(*string == 'e' || *string == 'E') isNum = isExp(&string); else isNum = false; } return isNum && (*string == '\0'); } void scanDigits(char **str) { while(**str != '\0' && **str >= '0' && **str <= '9') ++(*str); } bool isExp(char **str) { if(**str != 'e' && **str != 'E') return false; ++(*str); if(**str == '+' || **str == '-') ++(*str); if(**str == '\0') return false; scanDigits(str); return (**str == '\0') ? true : false; } }; </span>
相关文章推荐
- 字符串面试题(一)字符串逆序
- 关于数组的几道面试题
- 程序员爱情文学
- 程序员爱情文学
- Android面试资料集锦
- 面试题整理:SQL(二)
- 简直offer-第四章解决面试题思路(二叉树中和为某一值的路径)
- 程序员常去的顶级开发社区
- 海量数据处理:十道面试题与十个海量数据处理方法总结
- OSChina 周三乱弹 —— 给程序员的一副对联
- 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
- 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】
- 【LeetCode-面试算法经典-Java实现】【143-Copy List with Random Pointer(有随机指针的链表复制)】
- 【LeetCode-面试算法经典-Java实现】【142-Linked List Cycle II(单链表中有环II)】
- 【LeetCode-面试算法经典-Java实现】【141-Linked List Cycle(单链表中有环)】
- 【LeetCode-面试算法经典-Java实现】【139-Word Break(单词拆分)】
- 黑马程序员——黑苹果的日记(8)——oc基础之类和对象
- 黑马程序员——黑苹果的日记(11)—— oc加强
- [读书笔记—程序员]《高效程序员的45个习惯:敏捷开发修炼之道》- 苏帕拉马尼亚姆,亨特
- 黑马程序员——黑苹果的日记(6)——Foundation之NSString