题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
代码的鲁棒性
#pragma once
namespace num_char
{
class Solution {
public:
bool isNumeric(char* string)
{
if (string == nullptr)
{
return false;
}
char t = string[0];
int i = 0;
int fh = 0; // 符号
int fhi = 0; // 符号位置
int e_num = 0; // e的数量
int e_i = 0;
int point_num = 0; // 点的数量
int point_i = 0;
int num = 0;
while (t != '\0')
{
if (t == '+' || t == '-')
{
fh++;
fhi = i;
if (fh == 1 && e_num == 0)
{
if (fhi > 0)
{
return false;
}
}
if (e_num == 1 && (fh == 1 || fh == 2))
{
if (e_i + 1 != fhi)
{
return false;
}
}
if (fh == 2 && e_num == 0)
{
return false;
}
}
else if (t == 'e' || t == 'E')
{
e_num++;
e_i = i;
}
else if (t == '.')
{
point_num++;
point_i = i;
}
else if (t >= '0' && t <= '9')
{
num = i;
}
else
{
return false;
}
// 符号大于
if (fh > 2 || e_num > 1 || point_num > 1)
{
return false;
}
if (e_num == 1 && (e_i < point_i))
{
return false;
}
t = string[++i];
}
if (e_num == 1 && num < e_i)
{
return false;
}
return true;
}
};
}
test.cpp
#pragma once
#include "num_char.h"
namespace num_char
{
void start_test()
{
Solution s;
char a[] = "-1E-16";
bool b = s.isNumeric(a);
char a1[] = "-123";
b = s.isNumeric(a1);
char a2[] = "-1e-16";
b = s.isNumeric(a2);
char a3[] = "12e+4.3";
b = s.isNumeric(a3);
}
}