468 Validate IP Address 验证IP地址

详见:https://leetcode.com/problems/validate-ip-address/description/

Java实现:

class Solution {
    public String validIPAddress(String IP) {
        if (isIpV4(IP)) {
            return "IPv4";
        } else if (isIpV6(IP)) {
            return "IPv6";
        } else {
            return "Neither";
        }
    }
    private boolean isIpV4(String ip) {
        if (ip == null || ip.isEmpty()) {
            return false;
        }
        String[] splits = ip.split("\.", -1);
        if (splits.length != 4){
            return false;
        }
        for (int i = 0; i < 4; i++) {
            try {
                int val = Integer.parseInt(splits[i], 10);
                if (val < 0 || val > 255){
                    return false;
                }
            } catch (Exception e) {
                return false;
            }
            if (splits[i].charAt(0) == '-' || splits[i].charAt(0) == '+'){
                return false;
            }
            if (splits[i].charAt(0) == '0' && splits[i].length() > 1){
                return false;
            }
        }
        return true;
    }
    private boolean isIpV6(String ip) {
        if (ip == null || ip.isEmpty()) {
            return false;
        }
        String[] splits = ip.split(":", - 1);
        if (splits.length != 8){
            return false;
        }
        for (int i = 0; i < 8; i++) {
            try {
                int val = Integer.parseInt(splits[i], 16);
                if (val < 0 || val > 65535){
                    return false;
                }
            } catch (Exception e) {
                return false;
            }
            if (splits[i].charAt(0) == '-' || splits[i].charAt(0) == '+'){
                return false;
            }
            if (splits[i].length() > 4){
                return false;
            }
        }
        return true;
    }
}

C++实现:

class Solution {
public:
    string validIPAddress(string IP) 
    {

         if(IsIPv4(IP)) 
         {
             return "IPv4";
         }
         else if(IsIPv6(IP)) 
         {   
             return "IPv6";
         }
         else
         {
            return "Neither";
         }
    }

private:
    bool IsIPv4(string IP)
    {
        string temp="";
        int count=0;
        int count1=0;
        for(int i=0;i<=IP.length();i++)
        {
            if(IP[i]!='.'&&IP[i]!='')
            {
                if(IP[i]<'0'||IP[i]>'9')
                {
                    return false;
                }
                temp=temp+IP[i];
                count1++;
                if(count1>=4)
                {
                    return false;
                }
            }
            else
            {
               if(temp!=""&&stoi(temp)<256&&stoi(temp)>=0)
               {
                   if(temp[0]=='0'&&temp.length()>1)
                   {
                       return false;
                   }
                   count++;
                   if(count==4)
                   {
                       return i==IP.length();
                   }
               }
               else
               {
                   return false;
               }
               temp=""; 
               count1=0;
            }
        }
        return false;
    }
    bool IsIPv6(string IP)
    {
        string temp="";
        int count=0;
        int count1=0;
        for(int i=0;i<=IP.length();i++)
        {
            if((IP[i]>='0'&&IP[i]<='9')||(IP[i]>='A'&&IP[i]<='F')||(IP[i]>='a'&&IP[i]<='f'))
            {
                count1++;
                if(count1>4)
                {
                    return false;
                }
            }
            else if(IP[i]==':'||IP[i]=='')
            {
                if(count1==0)
                {
                    return false;
                }
                count++;
                count1=0;
                if(count==8) 
                {
                    return i==IP.length();
                }
            }
            else
            {
                return false;
            }

        }
        return false;
    }

};

 参考:https://blog.csdn.net/starstar1992/article/details/54925098

原文地址:https://www.cnblogs.com/xidian2014/p/8902641.html