题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
#include <stdio.h> int main() { int ip[4]={0}; int mk[4]={0}; char str[50]; int mask; int sum[7]={0}; int i,len; int tail_ip[]={126,191,223,239,255}; while(scanf("%s",str)!=EOF) { len=sscanf(str,"%d.%d.%d.%d~%d.%d.%d.%d",ip,ip+1,ip+2,ip+3,mk,mk+1,mk+2,mk+3); if(ip[0]==0||ip[0]==127)//0或者127忽略不计 { continue; } if(len!=8)//有空数字为错误ip { sum[5]++; continue; } if((mk[0]==0)||(mk[0]==255&&mk[1]==255&&mk[2]==255&&mk[3]==255))//全是0或者全是1为错误掩码 { sum[5]++; continue; } mask=(mk[0]<<24)+(mk[1]<<16)+(mk[2]<<8)+mk[3];//掩码合并 if((~mask+1)& ~mask) { sum[5]++; continue; } for(i=0;ip[0]>tail_ip[i];i++);//ip类型判断 sum[i]++; if(ip[0]==10||(ip[0]==172&&ip[1]>=16&&ip[1]<=31)||(ip[0]==192&&ip[1]==168))//私网ip { sum[6]++; } } for(i=0;i<7;i++) { printf("%d ",sum[i]); } return 0; }