• 表示数值的字符串


    1.个人觉得牛客网这个答案比较容易理解

    思路:用for循环遍历: 判断各种会出错的情况 报false;如果能过五关斩六将走到最后,那么就是true

    注意判断顺序!!

    1)e后面应该接数字 (如果e是最后一个数,报错)

    2)不能同时存在两个e

    3)+ - 所在的位置,只可可能位于首位或者位于e后面;

    4)e后面不可以有小数点  小数点只可能有一次  不可能出现2次

    5)如果字符其他数字的部分,有出现<'0' 或者     >'9',那么是无效的;

    class Solution {
    public:
        bool isNumeric(char* str) {
            // 标记符号、小数点、e是否出现过
            bool sign = false, decimal = false, hasE = false;
            for (int i = 0; i < strlen(str); i++) {
                if (str[i] == 'e' || str[i] == 'E') {
                    if (i == strlen(str)-1) return false; // e后面一定要接数字
                    if (hasE) return false;  // 不能同时存在两个e
                    hasE = true;
                } else if (str[i] == '+' || str[i] == '-') {
                    // 第二次出现+-符号,则必须紧接在e之后
                    if (sign && str[i-1] != 'e' && str[i-1] != 'E') return false;
                    // 第一次出现+-符号,且不是在字符串开头,则也必须紧接在e之后
                    if (!sign && i > 0 && str[i-1] != 'e' && str[i-1] != 'E') return false;
                    sign = true;
                } else if (str[i] == '.') {
                  // e后面不能接小数点,小数点不能出现两次
                    if (hasE || decimal) return false;
                    decimal = true;
                } else if (str[i] < '0' || str[i] > '9') // 不合法字符
                    return false;
            }
            return true;
        }
    };
    class Solution {
    public:
        bool isNumeric(char* string)
        { // 标记符号、小数点、e是否出现过
           bool sign=false,decimal=false,hasE=false;  //默认没出现
             for(int i=0;i<strlen(string);i++)//遍历;
             {
            //判断e后应接数字  不能存在两个e
            if(string[i]=='e'||string[i]=='E')
             {
               if(i==strlen(string)-1) //最后一位‘
               return false;                   //直接返回错误
               if(hasE)//第一次进肯定是false 不会进  //下一次再进来证明有两个e  保错
               return false; 
               hasE=true;
             }
            else if(string[i]=='-'||string[i]=='+')
            {
                // 第二次出现+-符号,则必须紧接在e之后
                if(sign&&string[i-1]!='e'&&string[i-1]!='E')//sign=true 已经存在了
                  return false;
                //首次出现符号 既不在开头,它前面也无e
                if(!sign&&i>0&&string[i-1]!='e'&&string[i-1]!='E')
                 return false;
                sign=true; //if条件进来了他就有符号
            }
             else if(string[i]=='.')
             {
              if (hasE||decimal)//小数点出现两次    //这里不太懂 为什么有e  //懂了  说明这里的遍历已经在e之后了
                return false;
            
                 decimal=true;   
             }
             else if(string[i]<'0'||string[i]>'9')//非法输入
             {
               return false;  
             }   
     
                 
           }
       return true;  //没有任何问题 走到最后一步
            
        }
    
    };
  • 相关阅读:
    做到就得到,人生成功的启示
    这个世界没什么过不去的事情,记我的经历
    要想富,先读书,没有文化要吃一辈子的亏
    git学习笔记11-git多人协作-实际多人怎么开发
    git学习笔记10-新开发的功能不想要了-强行删除分支
    git学习笔记09-bug分支-自己的分支改到一半了-要去改bug怎么办?
    git学习笔记08-分支管理策略-实际上我们应该怎么应用分支
    git学习笔记07-冲突了怎么办-那就解决冲突呗
    git学习笔记06-创建分支合并分支-比svn快多了,因为只有指针在改变
    git学习笔记05-从远程库克隆
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11382049.html
Copyright © 2020-2023  润新知