2023-08-03力扣今日三题

链接:

剑指 Offer 20. 表示数值的字符串

题意:

根据规则判断字符串是否是数值,规则不详叙

解:

状态机+字符串处理

实际代码:

#include
using namespace std;
void NoSpace(string &s)
{
    int pos1=s.find_first_not_of(" ");
    int pos2=s.find_last_not_of(" ");
    if(pos1!=-1)s=s.substr(pos1,pos2-pos1+1);
}
bool isNumber(string s)
{
    NoSpace(s);//去除前后空格
    int lg=s.size(),zt=0,num=0,point=0;
    for(int i=0;i='0'&&s[i]<='9')
            {
                zt=1;//进入状态1 
                num++;
            }
            else if(s[i]=='.')//只允许一个点 
            {
                zt=1;point++;//进入状态1
                if(point>1) return false;
            }
            else return false;//非法字符 
        }
        else //状态2 符号、整数 状态3 整数 
        {
            if(s[i]=='+'||s[i]=='-')//只允许一个符号 
            {
                if(zt==2&&i!=lg-1) zt=3;//进入状态3符号后面不是结尾 
                else return false;
            }
            else if(s[i]>='0'&&s[i]<='9') zt=3;//进入状态3 
            else return false; //非法字符 
        } 
    }
    if(num==0||zt==2) return false;//没有数字或e后没有字符 
    else return true;
}
int main()
{
    string s;
    getline(cin,s);
    bool ans=isNumber(s);
    cout<

限制:

  • 1 <= s.length <= 20
  • s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,空格 ' ' 或者点 '.'

你可能感兴趣的:(力扣每日一题,leetcode)