题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
思路分析
- 指针操作
- 数字表示解析
- 一般数字
- 科学表达式
class Solution {
public:
bool isNumeric(char* string)
{
if (string == nullptr) {
return false;
}
bool numberic = scanInteger(&string);//整数部分
if (*string == '.') {// 小数部分
++string;
numberic = scanUnsignedInteger(&string) || numberic;
}
if (*string == 'e' || *string == 'E') {// 指数部分
++string;
numberic = numberic && scanInteger(&string);
}
return numberic && *string == '\0';
}
private:
/**
子函数,扫描整数
*/
bool scanInteger(char** str){
// 符号处理
if (**str == '+' || **str == '-'){
++(*str);
}
// 处理无符号整数
return scanUnsignedInteger(str);
}
/**
子函数,扫描无符号整数
*/
bool scanUnsignedInteger(char** str){
const char* before = *str;
// 满足无符号整数要求
while(**str != '\0' && **str >= '0' && **str <= '9'){
++(*str);// 指针后移
}
return *str > before;// 是否存在数字
}
};
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com