65. 有效数字 力扣 模拟题 细节,string用法

题目描述:

有效数字(按顺序)可以分成以下几个部分:

一个 小数 或者 整数
(可选)一个 'e' 或 'E' ,后面跟着一个 整数
小数(按顺序)可以分成以下几个部分:

(可选)一个符号字符('+' 或 '-')
下述格式之一:
至少一位数字,后面跟着一个点 '.'
至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
一个点 '.' ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:

(可选)一个符号字符('+' 或 '-')
至少一位数字
部分有效数字列举如下:

["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分无效数字列举如下:

["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。

题源:https://leetcode-cn.com/problems/valid-number/

题解:全靠细节

string取一小截,可以用string.substr(起始位置,长度)

class Solution {
public:
    bool isint(string s)
    {
        int l=s.size();
        int i=0;
        if (s[i]=='+' || s[i]=='-') i++;
        int num=0;  //需要考虑的细节,就是至少是有一个数字的
        for(;i<l;i++)
         if (s[i]>='0' && s[i]<='9')   {num++; continue;}
           else return false;
        if(num>0) return true;
          else return false;
    }

    bool isfloat(string s)
    {
        int l=s.size();
        int flagdot=0;
        int posdot=-1;
        int i=0;
        if (s[i]=='+' || s[i]=='-') i++;

        for(int j=i;j<l;j++)
          if(s[j]=='.') { flagdot++; posdot=j;}
        if (flagdot!=1) return false;

        int num=0;  //需要考虑的细节,就是至少是有一个数字的
        for(;i<posdot;i++)
         if(s[i]>='0' && s[i]<='9') {num++; continue;}
            else return false;

        for(i=posdot+1;i<l;i++)
            if(s[i]>='0' && s[i]<='9') {num++; continue;}
            else return false;
        if (num>0)  return true;
          else return false;
    }

    bool isNumber(string s) {
    int l=s.size();

     int flagE=0;
     int posE=-1;
     for(int i=0;i<l;i++)
      if (s[i]=='E' || s[i]=='e')  {flagE++; posE=i;}
     if (flagE>1) return false;
    
     bool res=1;
     if (flagE==1)
     {
         
         if( isint(s.substr(posE+1,l-posE)) &&  
             ( isint(s.substr(0,posE-0)) || isfloat(s.substr(0,posE-0)) ) )
              return true;
          else return false; 
     }
     else 
     {
         if ( isint(s.substr(0,posE-0)) || isfloat(s.substr(0,posE-0)) ) return true;
            else return false;
     }

    }
};
原文地址:https://www.cnblogs.com/stepping/p/14893642.html