剑指Offer--054-表示数值的字符串
来源:互联网 发布:淘宝日用品代理 编辑:程序博客网 时间:2024/05/18 00:13
链接
牛客OJ:表示数值的字符串
九度OJ:未收录
GitHub代码: 054-表示数值的字符串
CSDN题解:剑指Offer–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 // __tmainclass 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;}
0 0
- 剑指Offer--054-表示数值的字符串
- 剑指offer--表示数值的字符串
- 剑指offer 54-表示数值的字符串
- 《剑指offer》表示数值的字符串
- 剑指offer—表示数值的字符串
- 剑指offer:表示数值的字符串
- 《剑指offer》:[54]表示数值的字符串
- 剑指offer-表示数值的字符串
- 《剑指offer》-表示数值的字符串
- 剑指offer 表示数值的字符串
- 剑指offer-53.表示数值的字符串
- 剑指offer:表示数值的字符串
- 剑指Offer:表示数值的字符串
- 剑指offer--表示数值的字符串
- 剑指offer--表示数值的字符串
- 剑指offer:表示数值的字符串
- 剑指Offer---表示数值的字符串
- 【剑指Offer学习】【面试题54:表示数值的字符串】
- Poj1745 Divisibility
- keras实现deepid:flatten中间层、merge多个层次、二维图像的处理、权重的保存与重用、Autoencoder
- viewPager+photoView实现图片轮播和手势缩放功能 支持手势缩放的imageView 如何实现相册左右滑动和手势缩放 如何让图片自适应控件大小 photoView如何使用(上)
- Imageloader配置和设置圆形
- 手机开发实战51——SMS介绍1
- 剑指Offer--054-表示数值的字符串
- UEditor动态设置工具栏
- MySQL添加用户、删除用户与授权
- Bluemix上Python应用启动ERR import MySQLdb ImportError: No module named MySQLdb
- Suse 基于AutoYaST自动化安装
- 阿里云ECS—搭建个人博客流程
- 手机开发实战52——SMS介绍2
- CodeForces - 630C Lucky Numbers【计数】
- 第九周实践——阅读程序(3)