#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 intMask = (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;}
Identify and classify valid IP addresses and masks