题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
#include <stdio.h>
//判断掩码是否合法的函数
int zm(int b1,int b2,int b3,int b4){
if(b1!=255){
if((b1==128||b1==192||b1==224||b1==240||b1==248||b1==252||b1==254)&&b2==0&&b3==0&&b4==0)
return 1;
else return 0;
}
else{
if(b2!=255){
if((b2==0||b2==128||b2==192||b2==224||b2==240||b2==248||b2==252||b2==254)&&b3==0&&b4==0)
return 1;
else return 0;
}
else{
if(b3!=255){
if((b3==0||b3==128||b3==192||b3==224||b3==240||b3==248||b3==252||b3==254)&&b4==0)
return 1;
else return 0;
}
else{
if(b4==0||b4==128||b4==192||b4==224||b4==240||b4==248||b4==252||b4==254)
return 1;
else return 0;
}
}
}
}
//判断ip是否合法的函数
int ifok(int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4){
if(a1<0||a1>255||a2<0||a3<0||a4<0||a2>255||a3>255||a4>255)
return 0;
else if(a1==0||a1==127) return 2;
else{
if(zm(b1,b2,b3,b4)) return 1;
else return 0;
}
}
int main() {
int Anum=0,Bnum=0,Cnum=0,Dnum=0,Enum=0,Fnum=0,Snum=0;
int a1,a2,a3,a4,b1,b2,b3,b4;
int t;
while (scanf("%d.%d.%d.%d~%d.%d.%d.%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4) != EOF) {
t=ifok(a1, a2, a3, a4, b1, b2, b3, b4);
if(t==0) Fnum++;
else if(t==1){
if(a1>0&&a1<127) Anum++;
if(a1>127&&a1<192) Bnum++;
if(a1>191&&a1<224) Cnum++;
if(a1>223&&a1<240) Dnum++;
if(a1>239&&a1<256) Enum++;
if(a1==10||(a1==172&&a2>15&&a2<32)||(a1==192&&a2==168)) Snum++;
}
}
printf("%d %d %d %d %d %d %d",Anum,Bnum,Cnum,Dnum,Enum,Fnum,Snum);
return 0;
}

