1、题目要求
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
2、题目解析
首先,我们要明确表示数值的字符串的遵循模式为下图所示:
注意
1、其中A不是必需的,但是在此情况下小数部分不能为空
2、关于符号:A和C是以‘+’或‘-’开头的0-9的数位串,B是不能以‘+’或‘-’开头的0~9的数位串
3、A和C都是整数(可以有正负号也可以没有),B是一个无符号整形
扫描规则:如果遇到起始处有+’或‘-’,就是A部分;如果遇到起始处有‘.’,就是B部分;如果是E或者e就是C部分。
代码实现我们总共分为三个函数。
isNumberic
函数主要是用来判断是否是表示数值的字符串,他分别调用scanA和scanB两个函数。scanB
函数主要负责扫描字符串中0-9的数位(类似于一个无符号的整数),可以用来匹配前面数值模式中的B部分。scanA
还要调用scanB函数,表示的含义是扫描可能以‘+’或者‘-’为起始的0-9的数位(类似于一个可能带有正负号的整数)用来匹配前面数值模式中的A、C部分
scanB函数实现如下:
bool ScanB(const char** str)
{
const char* before = *str;//定义一个指针标识起始位置
//合法情况的处理
if (*