有效数字
程序员文章站
2022-05-18 17:11:44
...
有效数字
描述
验证给定的字符串是否可以解释为十进制数字。
例如:
“0” => true
" 0.1 " => true
“abc” => false
“1 a” => false
“2e10” => true
" -90e3 " => true
" 1e" => false
“e3” => false
" 6e-1" => true
" 99e2.5 " => false
“53.5e93” => true
" --6 " => false
“-+3” => false
“95a54e53” => false
思路和代码
本题就是判断一个给定的字符串是否是有效的数字。
首先思考一下有效的数字应该是什么样,从头开始,首先去掉左边的空格部分,然后 i 遍历到第一个非空格的字符,若该字符为+或-,也满足条件,继续遍历,若遇到数字或小数点,也继续遍历,直到非数字,非小数点或者结尾出现,这时候判断一下出现的数字个数是不是小于1或者小数点是不是超过1,若是,则返回false。之后是判断是否遇到e,遇到e之后继续判断。
class Solution {
public:
bool isNumber(string s) {
int n = s.size();
if(n == 0)
return false;
int i = 0;
//去掉多余空格
while(s[i] == ' ')
i++;
//如果是加减号,也满足条件
if(s[i] == '+' || s[i] == '-')
i++;
//遍历如果是数字或小数点,则继续遍历,直到遇到不是数字或小数点或到了尾部
int numPoint = 0;
int numDigit = 0;
for(; (s[i]>='0' && s[i]<='9') || s[i]=='.'; i++)
{
if(s[i] == '.')
numPoint++;
else
numDigit++;
}
if(numPoint > 1 || numDigit < 1)//判断小数点个数和数字个数符不符合条件
return false;
//遇到e的情况
if(s[i] == 'e')
{
i++;
if(s[i] == '+' || s[i] == '-')
i++;
numDigit = 0;
for(; s[i]>='0' && s[i]<='9'; i++, numDigit++);
if(numDigit < 1)
return false;
}
for(; s[i] == ' '; i++);
return s[i] == '\0';
}
};