题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
http://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
#include <string.h>
int main()
{
char str[50]={0};
int a=0,b=0,c=0,d=0,e=0,f=0,g=0;
while(fgets(str, 50,stdin))
{
int flag=0,ip[8]={0},num=1,cet=0,len=strlen(str),x;
char two[32]={0};
for(int i=1;i<strlen(str);i++)
{
if(str[i]=='.'&&str[i-1]=='.')
flag=1;
}
if(flag==1)
{
f++;
continue;
}
for(int i=0;i<len-1;i++)
{
flag++;
if(i==len-2||str[i+1]=='~'||str[i+1]=='.')
{
for(int j=0;j<flag;j++)
{
ip[cet]+=num*(str[i-j]-48);
num*=10;
}
cet++;
num=1;
flag=-1;
}
}
cet=0;
flag=0;
if(ip[0]>=1&&ip[0]<=126)
x=0;
else if(ip[0]>=128&&ip[0]<=191)
x=1;
else if(ip[0]>=192&&ip[0]<=223)
x=2;
else if(ip[0]>=224&&ip[0]<=239)
x=3;
else if(ip[0]>=240&&ip[0]<=255)
x=4;
else
x=5;
if(ip[4]==0)
{
f++;
continue;
}
if((ip[4]==128||ip[4]==192||ip[4]==224||ip[4]==240||ip[4]==248||ip[4]==254||ip[4]==255||ip[4]==252)&&ip[5]==0&&ip[6]==0&&ip[7]==0)
switch(x)
{
case 0:
{
a++;
if(ip[0]==10)
g++;
break;
}
case 1:
{
b++;
if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
g++;
break;
}
case 2:
{
c++;
if(ip[0]==192&&ip[1]==168)
g++;
break;
}
case 3:
{
d++;
break;
}
case 4:
{
e++;
break;
}
case 5: break;
}
else if((ip[5]==128||ip[5]==192||ip[5]==224||ip[5]==240||ip[5]==248||ip[5]==254||ip[5]==0||ip[5]==255||ip[5]==252)&&ip[4]==255&&ip[6]==0&&ip[7]==0)
switch(x)
{
case 0:
{
a++;
if(ip[0]==10)
g++;
break;
}
case 1:
{
b++;
if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
g++;
break;
}
case 2:
{
c++;
if(ip[0]==192&&ip[1]==168)
g++;
break;
}
case 3:
{
d++;
break;
}
case 4:
{
e++;
break;
}
case 5: break;
}
else if((ip[6]==128||ip[6]==192||ip[6]==224||ip[6]==240||ip[6]==248||ip[6]==254||ip[6]==0||ip[6]==255||ip[6]==252)&&ip[4]==255&&ip[5]==255&&ip[7]==0)
switch(x)
{
case 0:
{
a++;
if(ip[0]==10)
g++;
break;
}
case 1:
{
b++;
if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
g++;
break;
}
case 2:
{
c++;
if(ip[0]==192&&ip[1]==168)
g++;
break;
}
case 3:
{
d++;
break;
}
case 4:
{
e++;
break;
}
case 5: break;
}
else if((ip[7]==128||ip[7]==192||ip[7]==224||ip[7]==240||ip[7]==248||ip[7]==254||ip[7]==0||ip[7]==252)&&ip[4]==255&&ip[6]==255&&ip[5]==255)
switch(x)
{
case 0:
{
a++;
if(ip[0]==10)
g++;
break;
}
case 1:
{
b++;
if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
g++;
break;
}
case 2:
{
c++;
if(ip[0]==192&&ip[1]==168)
g++;
break;
}
case 3:
{
d++;
break;
}
case 4:
{
e++;
break;
}
case 5: break;
}
else if(ip[0]!=0&&ip[0]!=127)
f++;
memset(str, 0, 50);
memset(ip, 0, 32);
}
printf("%d %d %d %d %d %d %d",a,b,c,d,e,f,g);
}