题解 | #识别有效的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;
}


查看9道真题和解析