</pre><pre name="code" class="cpp">#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
int a[7]={0};
while(cin>>s)
{
int i=0;
int b[8];
for(int q=0;q<8;q++)
{
int m=0;
for(;(s[i]!='.')&&(s[i]!='~')&&(s[i]!='\0');i++)
{
m++;
s[i]=s[i]-'0';
}
//if(m==0)
//a[5]=a[5]+1;
if(m==1)
b[q]=s[i-1]; //
if(m==2)
{
b[q]=10*s[i-2]+s[i-1];
}
if(m==3)
{
b[q]=100*s[i-3]+10*s[i-2]+s[i-1];
}
//else
//a[5]=a[5]+1;
i++;
}
if(((b[4]-b[5])!=0&&(b[4]-b[5])!=255)||((b[5]-b[6])!=0&&(b[5]-b[6])!=255)||((b[6]-b[7])!=0&&(b[6]-b[7])!=255)||b[0]>255||b[1]>255||b[2]>255||b[3]>255||b[0]<0||b[0]==127)
a[5]=a[5]+1;
else
{
if(b[0]>=1&&b[0]<=126)
a[0]=a[0]+1;
if(b[0]>=128&&b[0]<=191)
a[1]=a[1]+1;
if(b[0]>=192&&b[0]<=223)
a[2]=a[2]+1;
if(b[0]>=224&&b[0]<=239)
a[3]=a[3]+1;
if(b[0]>=240&&b[0]<=255)
a[4]=a[4]+1;
if(b[0]==10)
a[6]=a[6]+1;
if(b[0]==172&&(b[1]>=16)&&(b[1]<=31))
a[6]=a[6]+1;
if(b[0]==192&&(b[1]==168))
a[6]=a[6]+1;
}
}
for(int j=0;j<7;j++)
cout<<a[j]<<' ';
return 0;
}
题目描述
请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。
所有的IP地址划分为 A,B,C,D,E五类
A类地址1.0.0.0~126.255.255.255;
B类地址128.0.0.0~191.255.255.255;
C类地址192.0.0.0~223.255.255.255;
D类地址224.0.0.0~239.255.255.255;
E类地址240.0.0.0~255.255.255.255
私网IP范围是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
子网掩码为前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
本题暂时默认以0开头的IP地址是合法的,比如0.1.1.2,是合法地址
输入描述:
多行字符串。每行一个IP地址和掩码,用~隔开。
输出描述:
统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。
输入例子:
10.70.44.68~255.25