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

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

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

#include <string.h>

int main()
{
 char str[50]={0};
     int a=0,b=0,c=0,d=0,e=0,f=0,g=0;
 while(fgets(str, 50,stdin))
 {
     
    int flag=0,ip[8]={0},num=1,cet=0,len=strlen(str),x;
     char two[32]={0};
     for(int i=1;i<strlen(str);i++)
     {
         if(str[i]=='.'&&str[i-1]=='.')
             flag=1;
     }
     if(flag==1)
     {
         f++;
         continue;
     }
      for(int i=0;i<len-1;i++)
     {
          flag++;
          if(i==len-2||str[i+1]=='~'||str[i+1]=='.')
          {
              for(int j=0;j<flag;j++)
              {
                  ip[cet]+=num*(str[i-j]-48);
                  num*=10;
              }
              cet++;
              num=1; 
              flag=-1;
          }
     }
     cet=0;
     flag=0;
     if(ip[0]>=1&&ip[0]<=126)
         x=0;
     else if(ip[0]>=128&&ip[0]<=191)
         x=1;
     else if(ip[0]>=192&&ip[0]<=223)
         x=2;
     else if(ip[0]>=224&&ip[0]<=239)
         x=3;
      else if(ip[0]>=240&&ip[0]<=255)
         x=4;
     else 
         x=5;
         
     if(ip[4]==0)
     {
         f++;
         continue;
     }
     if((ip[4]==128||ip[4]==192||ip[4]==224||ip[4]==240||ip[4]==248||ip[4]==254||ip[4]==255||ip[4]==252)&&ip[5]==0&&ip[6]==0&&ip[7]==0)
         switch(x)
         {
             case 0:
                 {
                     a++;
                     if(ip[0]==10)
                         g++;
                     break;
                 }
             case 1:
                  {
                     b++;
                     if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
                         g++;
                     break;
                 }
                 case 2:
                  {
                     c++;
                     if(ip[0]==192&&ip[1]==168)
                         g++;
                     break;
                 }
                 case 3:
                  {
                     d++;
                      break;
                 }
                 case 4:
                  {
                     e++;
                      break;
                 }
             case 5: break;
         }
     else if((ip[5]==128||ip[5]==192||ip[5]==224||ip[5]==240||ip[5]==248||ip[5]==254||ip[5]==0||ip[5]==255||ip[5]==252)&&ip[4]==255&&ip[6]==0&&ip[7]==0)
         switch(x)
         {
             case 0:
                 {
                     a++;
                     if(ip[0]==10)
                         g++;
                     break;
                 }
             case 1:
                  {
                     b++;
                     if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
                         g++;
                     break;
                 }
                 case 2:
                  {
                     c++;
                     if(ip[0]==192&&ip[1]==168)
                         g++;
                     break;
                 }
                 case 3:
                  {
                     d++;
                      break;
                 }
                 case 4:
                  {
                     e++;
                      break;
                 }
                  case 5: break;
         }
      else if((ip[6]==128||ip[6]==192||ip[6]==224||ip[6]==240||ip[6]==248||ip[6]==254||ip[6]==0||ip[6]==255||ip[6]==252)&&ip[4]==255&&ip[5]==255&&ip[7]==0)
         switch(x)
         {
             case 0:
                 {
                     a++;
                     if(ip[0]==10)
                         g++;
                     break;
                 }
             case 1:
                  {
                     b++;
                     if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
                         g++;
                     break;
                 }
                 case 2:
                  {
                     c++;
                     if(ip[0]==192&&ip[1]==168)
                         g++;
                     break;
                 }
                 case 3:
                  {
                     d++;
                      break;
                 }
                 case 4:
                  {
                     e++;
                      break;
                 }
                  case 5: break;
         }
      else if((ip[7]==128||ip[7]==192||ip[7]==224||ip[7]==240||ip[7]==248||ip[7]==254||ip[7]==0||ip[7]==252)&&ip[4]==255&&ip[6]==255&&ip[5]==255)
         switch(x)
         {
             case 0:
                 {
                     a++;
                     if(ip[0]==10)
                         g++;
                     break;
                 }
             case 1:
                  {
                     b++;
                     if(ip[0]==172&&ip[1]>=16&&ip[1]<=31)
                         g++;
                     break;
                 }
                 case 2:
                  {
                     c++;
                     if(ip[0]==192&&ip[1]==168)
                         g++;
                     break;
                 }
                 case 3:
                  {
                     d++;
                      break;
                 }
                 case 4:
                  {
                     e++;
                      break;
                 }
                  case 5: break;
         }
     else if(ip[0]!=0&&ip[0]!=127)
         f++;
    
     memset(str, 0, 50);
     memset(ip, 0, 32);
 }
 printf("%d %d %d %d %d %d %d",a,b,c,d,e,f,g);
    
}
全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务