首页 > 代码库 > 识别有效的IP地址和掩码并进行分类统

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

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

int countA=0;
int countB=0;
int countC=0;
int countD=0;
int countE=0;
int countError=0;
int countPrivate=0;

void get(char *str)
{
    int num = strlen(str);

    int i=0;

    unsigned int arr[8] = {0};
    int counter = 0;

    int val = 0;
    for(i=0; i<=num; i++)
    {
        if(str[i]>=‘0‘ && str[i]<=‘9‘)
        {
            val = val*10 + str[i] - ‘0‘;
        }
        else if(str[i]==‘.‘ || str[i]==‘~‘  || str[i]==‘\0‘)
        {
            if(str[i-1]<‘0‘ || str[i-1]>‘9‘)
            {
                countError++;
                return;
            }
            if(val>255)
            {
                countError++;
                return;
            }
            if(counter>=8)
            {
                countError++;
                return;
            }
            arr[counter++] = val;
            val = 0;
        }
        else
        {
            return;
        }
    }


    unsigned int mask = (arr[4]<<24)+(arr[5]<<16)+(arr[6]<<8)+arr[7];

    int tmpi;
    for(tmpi=31; tmpi>=0 && (mask>>tmpi)%2==1; tmpi--);
    if(mask>>(tmpi+1)<<(tmpi+1) != mask)
    {
        countError++;
        return;
    }


    if(arr[0]>=1 && arr[0]<=126)
    {
        countA++;
    }

    if(arr[0]>=128 && arr[0]<=191)
    {
        countB++;
    }

    if(arr[0]>=192 && arr[0]<=223)
    {
        countC++;
    }

    if(arr[0]>=224 && arr[0]<=239)
    {
        countD++;
    }
    if(arr[0]>=240 && arr[0]<=255)
    {
        countE++;
    }

    if(arr[0]==10)
    {
        countPrivate++;
    }

    if(arr[0]==172 && (arr[1]>=16 && arr[1]<=31))
    {
        countPrivate++;
    }
    if(arr[0]==192 && arr[1]==168)
    {
        countPrivate++;
    }
}

int main()
{

    char str[100];

    while(cin>>str)
    {
        get(str);
    }

    cout<<countA<<‘ ‘<<countB<<‘ ‘<<countC<<‘ ‘<<countD<<‘ ‘<<countE<<‘ ‘<<countError<<‘ ‘<<countPrivate;

    return 0;
}

  

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