zoukankan      html  css  js  c++  java
  • 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;
         }
    
        }
    };
  • 相关阅读:
    美国贷款买饭的房屋保险
    ArrayList和数组间的相互转换
    JList动态添加元素
    美国交往礼仪
    刘元普双生贵子(但行好事,莫问前程)
    CountDownLatch与CyclicBarrier
    彻底理解Java的feature模式
    Java中的Future模式原理自定义实现
    浅谈Java Future接口
    Future接口和Callable接口以及FeatureTask详解
  • 原文地址:https://www.cnblogs.com/stepping/p/14893642.html
Copyright © 2011-2022 走看看