题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是。
#include<iostream>
using namespace std;
bool scanUnsignedInteger(const char** str) {
const char* before = *str;
while (**str != '\0' && **str > '0' && **str < '9') {
(*str)++;
}
//*str>before表示存在0到9的数字
return *str > before;
}
bool scanInteger(const char** str) {
if (**str == '+' || **str == '-') {
(*str)++;
}
return scanUnsignedInteger(str);
}
bool isNumeric(const char* str) {
//数字字符串形式:A[.[B]][e|EC]或者.[B]][e|EC
if (str == nullptr) {
return false;
}
//1.先检查整数部分 整数部分为有符号数
bool numeric = scanInteger(&str);
//2.再检查小数部分 小数部分为无符号数
if (*str == '.') {
str++;
numeric = numeric && scanUnsignedInteger(&str);
}
//3.最后检查指数部分 指数部分为有符号数
if (*str == 'e' || *str == 'E') {
str++;
numeric = numeric && scanInteger(&str);
}
return numeric && (*str == '\0');
}
int main() {
char a[] = "+3";
cout << isNumeric(a) << endl;
char b[] = "-5e2";
cout << isNumeric(b) << endl;
char c[] = "12e";
cout << isNumeric(c) << endl;
char d[] = "1a3.14";
cout << isNumeric(d) << endl;
char e[] = "+-2";
cout << isNumeric(e) << endl;
char f[] = "12E3.2";
cout << isNumeric(f) << endl;
return 0;
}