题解 | 识别有效的IP地址和掩码并进行分类统计
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
string s;
vector<int> x;
int i,j,l;
int A[7]={0};
while(cin>>s)
{
j=0;
for(i=0;i<s.size();i++)
{
if(s[i]>=48&&s[i]<=57)
j=j*10+s[i]-48;
else
j=0;
if((i==s.size()-1)&&(s[i]>=48&&s[i]<=57))
x.push_back(j);
else if((s[i+1]=='.'||s[i+1]=='~')&&(s[i]>=48&&s[i]<=57))
x.push_back(j);
else if(s[i]=='.'||s[i]=='~')
x.push_back(s[i]);
}
if(x[0]==0||x[0]==127){
x.clear();
continue;
}
if((x.size()!=15)||(x[8]==255&&x[10]==255&&x[12]==255&&x[14]==255)||(x[8]==0&&x[10]==0&&x[12]==0&&x[14]==0)){
A[5]++;
x.clear();
continue;
}
else
{
int k[32]={0};
j=8;
l=7;
while(j<15){
k[(j-8)/2*8+l]=x[j]%2;
x[j]=x[j]/2;
l--;
if(l==-1||x[j]==0)
{
l=7;
j=j+2;
}
}
for(j=0;j<32;j++)
{
if(k[j]==0)
l=0;
if(k[j]==1&&l==0){
A[5]++;
j=79;
break;
}
}
if(j==79){
j=0;
x.clear();
continue;
}
}
if(x[0]>=1&&x[0]<=127){
A[0]++;
if(x[0]==10)
A[6]++;
}
else if(x[0]>=128&&x[0]<=191){
A[1]++;
if(x[0]==172&&x[2]>=16&&x[2]<=31)
A[6]++;
}
else if(x[0]>=192&&x[0]<=223){
A[2]++;
if(x[0]==192&&x[2]==168)
A[6]++;
}
else if(x[0]>=224&&x[0]<=239)
A[3]++;
else if(x[0]>=240&&x[0]<=255)
A[4]++;
x.clear();
}
cout<<A[0]<<" "<<A[1]<<" "<<A[2]<<" "<<A[3]<<" "<<A[4]<<" "<<A[5]<<" "<<A[6];
}
