题解 | #识别有效的IP地址和掩码并进行分类统计#

识别有效的IP地址和掩码并进行分类统计

http://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

#include<iostream>
#include<vector>
using namespace std;
vector<int> e(string a)
{
    vector<int>d;
    int c=0;
    for(int i=0;i<a.length();i++)
    {
        
        if(a[i]=='.'&&i!=0)
        {
            int b=0;
            for(int j=0;j<i;j++)
            {
                b=b*10+a[j]-'0';
            }
            d.push_back(b);
        a=a.substr(i+1,a.length());
            c++;
            i=-1;
        }
        else if(a[i]=='.'&&i==0)
        {
              d.push_back(-1);;
             a=a.substr(i+1,a.length());
            c++;
             i=-1;
        }
    }
    if(a.length()>=1)
    {
        int b=0;
          for(int j=0;j<a.length();j++)
            {
                b=b*10+a[j]-'0';
            }
        d.push_back(b);
    }
    else 
    {
         d.push_back(-1);
    }
    return(d);
}
int main()
{
    string a;
    int d[7]={0};
    while(cin>>a)
    {
        string b,c;
        for(int i=0;i<a.length();i++)
        {
            if(a[i]=='~')
            {
                b=a.substr(0,i);
                c=a.substr(i+1,a.length());
                break;
            }
        }
       vector<int>f,g;
        f=e(b);
        g=e(c);
    if(f[0]==0||f[0]==127)
                {
                   continue;
                }
        vector<int>h;
        for(int i=0;i<4;i++)
        {
            vector<int>w;
            if(g[i]!=0)
            {
           while(g[i])
           {
               w.push_back(g[i]%2);
               g[i]=g[i]/2;
           }
                if(w.size()<8)
                {
                    d[5]++;
                    goto x;
                }
            while(w.size()){
            h.push_back(w.back());
                w.pop_back();
            }
        }
            else if(g[i]==0)
            {
                h.push_back(0);
            }
            }
        for(int i=0;i<h.size();i++)
        {
            if(h[i]==0)
            {
                for(int j=i+1;j<h.size();j++)
                {
                    if(h[j]==1)
                    {
                        d[5]++;
                        goto x;
                    }
                }
            }
            else if(h[i]==0&&i==0)
            {
                d[5]++;
                        goto x; 
            }
            else if(h[i]==1&&i==h.size()-1)
            {
                 d[5]++;
                        goto x;
            }
        }
        if(f[2]>=0&&f[2]<=255&&f[3]>=0&&f[3]<=255)
        {
            if(f[1]>=0&&f[1]<=255)
            {
                if(f[0]>=1&&f[0]<=126)
                {
                    if(f[0]==10)
                    {
                        d[6]++;
                    }
                    d[0]++;
                }
                else if(f[0]>=128&&f[0]<=191)
                {
                    if(f[0]==172&&f[1]>=16&&f[1]<=31)
                    {
                        d[6]++;
                    }
                    d[1]++;
                }
                 else if(f[0]>=192&&f[0]<=223)
                {
                     if(f[0]==192&&f[1]==168)
                     {
                         d[6]++;
                     }
                    d[2]++;
                }
                 else if(f[0]>=224&&f[0]<=239)
                {
                    d[3]++;
                }
                else if(f[0]>=240&&f[0]<=255)
                {
                    d[4]++;
                }
                else
                {
                    d[5]++;
                }
            }
            else
                {
                    d[5]++;
                } 
        }
         else
                {
                    d[5]++;
                } 
        x:
        continue;
    }
    for(int i=0;i<7;i++)
    {
        cout<<d[i]<<' ';
    }
    return(0);
}
全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务