剑指Offer--054-表示数值的字符串
2016-06-01 21:38
351 查看
链接
牛客OJ:表示数值的字符串九度OJ:未收录
GitHub代码: 054-表示数值的字符串
CSDN题解:剑指Offer–054-表示数值的字符串
牛客OJ | 九度OJ | CSDN题解 | GitHub代码 |
---|---|---|---|
054-表示数值的字符串 | 未收录 | 剑指Offer–054-表示数值的字符串 | 054-表示数值的字符串 |
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,
字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。
但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
分析
我们首先分析一下子可能是数值的字符串的格式在数值之前可能有一个表示正负的’-‘或者’+’。
接下来是若干个0到9的数位表示数值的整数部分(在某些小数里可能没有数值的整数部分)。
如果数值是一个小数,那么在小数点后面可能会有若干个0到9的数位表示数值的小数部分。如果数值用科学计数法表示,接下来是一个’e’或者‘E’,以及紧跟着的一个整数(可以有正负号)表示指数。
判断一个字符串是否符合上述模式时,
* 首先看第一个字符是不是正负号。
* 如果是,在字符串上移动一个字符,继续扫描剩余的字符串中0到9的数位。
* 如果是一个小数,则将遇到小数点。
* 另外,如果是用科学计数法表示的数值,在整数或者小数的后面还有可能遇到’e’或者’E’。
代码
#include <iostream> using namespace std; // 调试开关 #define __tmain main #ifdef __tmain #define debug cout #else #define debug 0 && cout #endif // __tmain class Solution { public: bool isNumeric(char* str) { if(str == NULL) { return false; } // 可能遇见符号+/- if(*str == '+' || *str == '-') { ++str; } if(*str == '\0') { return false; } bool numberic = true; // 处理可能遇见的数字 ScanDigits(&str); if(*str != '\0') { if(*str == '.') { ++str; ScanDigits(&str); if(*str == 'e' || *str == 'E') { numberic = IsExponential(&str); } } else if(*str == 'e' || *str == 'E') { numberic = IsExponential(&str); } else { numberic = false; } } return numberic && *str == '\0'; } void ScanDigits(char **str) { while(**str != '\0' && (**str >= '0' && **str <= '9')) { ++(*str); } } bool IsExponential(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; } }; int __tmain( ) { Solution solu; cout <<solu.isNumeric("1a23") <<endl; return 0; }
相关文章推荐
- 查看github pages文档的方式
- 使用BAE的基于Web.py的简单博客程序
- msql 正则表达式
- 正则表达式
- 数据库链接字符串查询网站
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Mootools 1.2教程 正则表达式
- Flex字符串比较 还有Flex字符串操作
- Ruby实现的矩阵连乘算法
- Ruby中创建字符串的一些技巧小结
- ASP下经常用的字符串等函数参考资料
- 将字符串小写转大写并延时输出的批处理代码
- 将字符串转换成System.Drawing.Color类型的方法
- C#插入法排序算法实例分析
- 批处理FINDSTR正则表达式用法实例分析