zoukankan      html  css  js  c++  java
  • 识别有效的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]=='')
            {
                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;
    }
    

      

  • 相关阅读:
    规划
    学习规划
    续约
    每日一记
    每日记录
    《代码大全》第八章 防御式编程
    《代码大全》第七章
    平安夜
    每日一记
    培养良好的生活习惯
  • 原文地址:https://www.cnblogs.com/hardsoftware/p/6230910.html
Copyright © 2011-2022 走看看