// 面试题20:表示数值的字符串 // 题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如, // 字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、 // “1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是 #include <stdio.h> bool scanUnsignedInteger(const char** str); bool scanInteger(const char** str); // 数字的格式可以用A[.[B]][e|EC]或者.B[e|EC]表示,其中A和C都是 // 整数(可以有正负号,也可以没有),而B是一个无符号整数 bool isNumeric(const char* str) //传入为首地址 { if (str == nullptr) return false; //判断整数部分 bool isNumber = scanInteger(&str); //传入地址是因为需要修改str的值, //判断小数部分 if (*str == '.') { ++str; //可以没有整数或者小数部分 isNumber = scanUnsignedInteger(&str) || isNumber; } //判断指数部分 if (*str == 'E' || *str == 'e') { ++str; //指数前或者后不能没有数字 isNumber = scanInteger(&str) && isNumber; } //判断是否已经到达末尾 return isNumber && *str == '