题解 | #验证IP地址#

验证IP地址

https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 验证IP地址
 * @param IP string字符串 一个IP地址字符串
 * @return string字符串
 */

#include <string.h>
#define IsMiddle(max,min,value)  (value<=max&&value>=min)
 int CheckCharVaild(char* IP)
 {
    int ret=0,flag=0,i=0,len=strlen(IP);
    char c;
    while(i<len){
        c=IP[i];
        i++;
        if(IsMiddle(0x39,0x30,c)==1)
           continue;
        else if(IsMiddle('F','A',c)==1){
           flag=1;
           continue;
        }
        else if(IsMiddle('f','a',c)==1){
            flag=1;
           continue;
        }
        if(c=='.'&&flag==0) {
           if(ret==2){
              ret=0;
              break;
           }
           ret=1;
        }else if(c==':'){
           if(ret==1){
              ret=0;
              break;
           }
           ret=2;
        }else{
            ret=0;
            break;
        }
        
    }
    return ret;

 }

int GetStrCnt(char* str,char value){
    int len=0;
    char *p=str;
    while(1){
       p=strchr(p,value);
       if(p)
          len++;
       else
         break;
       p++;
    }
    return len;
}
int IPvCheck(char* IP,int type)
{
   struct IPkeyword{
      char *div;
      char divnum;
      int  base;
      int  max;
   }key[3]={{NULL,0,0,0},{".",3,10,255},{":",7,16,0xffff}};
   int index=0;
   char *p;
   char*div   =key[type].div;
   char divnum=key[type].divnum;
   int  base  =key[type].base;
   int  max   =key[type].max;
   if(type==0)
       return 0;
   if(GetStrCnt(IP,*div)!=divnum)
       return 0;
   for(index=0;index<=divnum;index++){
       p=(index==0 ? strtok(IP,div) : strtok(NULL,div));
       if(p==NULL)
           return 0;
       else if(strtol(p,NULL,base)>max)
          return 0;
       if(strlen(p)>=2&&p[0]==0x30){
           if(type==2&&p[1]==0x30)
               return 0;
           if(type==1)
              return 0;
       }
          
   }
   return type;
}

char* solve(char* IP ) {
    // write code here
    int type=0;
    static char IpType[3][12]={{"Neither"},{"IPv4"},{"IPv6"}};
    type=CheckCharVaild(IP);
 
    type=IPvCheck(IP,type); 
    
    return &IpType[type][0];
  

}

全部评论

相关推荐

机械打工仔:有说的你怀疑一下就行了,直接问也太实诚了
点赞 评论 收藏
分享
07-31 14:17
门头沟学院 Java
牛客39712426...:那他今年招集贸呢,26届本科大部分不就是属猴,除非写明招25的或者研究生
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务