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

全部评论
屎山代码
点赞 回复 分享
发布于 04-08 01:46 四川

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务