zoukankan      html  css  js  c++  java
  • 表示数值的字符串

    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;  //没有任何问题 走到最后一步
            
        }
    
    };
  • 相关阅读:
    20145201 《Java程序设计》第四周学习总结
    20145201 《Java程序设计》第三周学习总结
    20145201 《Java程序设计》第二周学习总结
    20145201 《Java程序设计》第一周学习总结(修改)
    输入与输出
    Fibonacci
    Collection与Map
    异常处理
    接口和多态
    继承与多态
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11382049.html
Copyright © 2011-2022 走看看