题解 | #识别有效的IP地址和掩码并进行分类统计#

识别有效的IP地址和掩码并进行分类统计

http://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

let str;
let a=0,b=0,c=0,d=0,e=0,f=0,g=0;
while(str = readline()){
  let strArr = str.split(' ');
  getRes(strArr)
}
function getRes(strArr){
  for(let v of strArr){
    let vArr = v.split('~');
    //这里题目有个小坑,就是如果子网掩码不正确了,那么我们就不需要再去判断IP了,我也是看了好久才发现
    //第二个坑,如果是特殊的IP,那么子网掩码也不需要判断,我真的是被坑死了    
    //这种题写的就很想骂人...
    let ipArr = vArr[0].split('.');
    if(ipArr[0] != 0 && ipArr[0] != 127){
      let use = isUse(vArr[1]);
      if(use){//正确了再去判断IP的分类跟私有的问题
        ipChoose(vArr[0])
      }else{
        continue;
      }
    }else{
      continue;
    }

  }
}

//判断子网掩码有效性
function isUse(str){
  let codeArr = str.split('.');
  if(unSafeIp(codeArr)){
    let codeStr = '';
    codeArr.forEach((v)=>{
      codeStr += parseInt(v,10).toString(2).padStart(8, '0');
    })
    if(!/^1+0+$/g.test(codeStr)){
      f++;
      return false;
    }else{
      return true;
    }
  }else{
    return false;
  }
}

//判断IP
function ipChoose(str){
  let ipArr = str.split('.');
  if(ipArr[0] != 0 && ipArr[0] != 127){
    let use = unSafeIp(ipArr);
    if(use){
      if(privateIp(ipArr)){
        g++;
      }
      ipCate(ipArr);
    }
  }

}

//无效IP判断
function unSafeIp(arr){
  //无效情况:1.根据.号分割后,输入的不是数字  2.根据.号分割后,数组的长度不等于4  3.根据.号分割后,数组有元素为空
  if(arr.length != 4){
    f++;
    return false;
  }else{
    for(let v of arr){
      if(isNaN(v) || v=='' || v<0 || v>255){
        f++;
        return false;
      }
    }
  }

  return true;
}

//私有IP判断
function privateIp(v){
  if(v[0] == 10) return true;
  if(v[0] == 172 && (v[1] >= 16 && v[1] <= 31)) return true;
  if(v[0] == 192 && v[1] == 168) return true;
  return false;
}

//ip分类判断
function ipCate(v){
  if(v[0] > 0 && v[0] <127){
    a++;
  }else if(v[0] > 127 && v[0] <192){ 
    b++;
  }else if(v[0] > 191 && v[0] <224){
    c++;
  }else if(v[0] > 223 && v[0] <240){
    d++;
  }else if(v[0] > 239 && v[0] <256){
    e++;
  }
}

console.log(a,b,c,d,e,f,g)
全部评论

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务