题目链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/
思路:
1. 首先去除字符串首尾字符
2. 根据小写e划分指数和底数
3. 分别对指数和底数判断是否合法即可
class Solution {
public:
bool judgeDigit(string s)
{
int len=s.size();
bool flag_has_digit=false;
bool point_flag=false;
for(int i=0;i<len;i++)
{
if(s[i]=='+'||s[i]=='-')
{
if(i!=0)return false; //+或-不出现在第一位则为false
}
else if(s[i]=='.')
{
if(point_flag)return false; //多个点返回false
point_flag=true;
}
else if(s[i]<'0'||s[i]>'9')
{
return false; //出现除0-9,+,-,.,之外的字符返回false
}
else
{
flag_has_digit=true; //记录是否出现了数字,最终判断标志
}
}
if(flag_has_digit)
return true;
else return false;
}
bool judgeExponent(string s) //与判断底数相比的唯一差别:.的出现也是不合法的
{
int len=s.size();
if(len==0)return false;
bool flag_has_digit=false;
bool point_flag=false;
for(int i=0;i<len;i++)
{
if(s[i]=='+'||s[i]=='-')
{
if(i!=0)return false;
}
else if(s[i]<'0'||s[i]>'9')
return false;
else
{
flag_has_digit=true;
}
}
if(flag_has_digit)
return true;
else return false;
}
bool isNumber(string s) {
int i=s.find_first_not_of(" "); //判断是否有非空字符
if(i==string::npos)
{
return false;
}
int j=s.find_last_not_of(" ");
s=s.substr(i,j-i+1);
int e=s.find("e");
if(e==string::npos) //无e整体判断
{
if(judgeDigit(s))return true;
else return false;
}
else
{
if(judgeDigit(s.substr(0,e))&&judgeExponent(s.substr(e+1))) //有e则分为底数和指数判断
return true;
else return false;
}
}
};