其他分享
首页 > 其他分享> > 468. 验证IP地址

468. 验证IP地址

作者:互联网

class Solution {
public:
	bool isIPv4(string IP)
	{
       if(IP[IP.size()-1]=='.')
            return false;        
		string temp;
		stringstream ss(IP);
        int count=0;
		while (getline(ss, temp, '.'))
		{
            count++;
            int a = atoi(temp.c_str());
            if(count>4 ||temp.empty() || temp.size()>3 || a > 255 ||  (a == 0 && temp != "0"))
                return false;
			//atoi接受的是char *类型的参数,也就是一个char数组,temp是string类型,所以先用.c_str()函数转成字符数组
			if (a != 0)
			{
				string s = temp.substr(0, 1);
				if (s == "0")
					return false;
			}
            for(int i=0;i<temp.size();i++)
            {
                if(!(temp[i]>='0' && temp[i]<='9'))
                    return false;
            }
		}
        if(count==4)
		return true;
        else return false;
	}

	bool isIPv6(string IP)
	{
        int count=0;
		string temp;
		stringstream ss(IP);
		set<char>store{ 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f' };
        if(IP[IP.size()-1]==':')
            return false;
		while (getline(ss, temp, ':'))
		{
            count++;
            if(count>8 || temp.length() > 4 || temp.empty())
                return false;
			for (int i = 0; i < temp.size(); i++)
			{
				if (!(temp[i] - '0' >= 0 && temp[i] - '0' <= 9 || store.find(temp[i]) != store.end()))
					return false;
			}
		}
        if(count==8)
		return true;
        else
            return false;
	}

	string validIPAddress(string IP) {
		if (IP.empty())
			return "Neither";
		for (int i = 0; i < IP.length(); i++)
		{
			if (IP[i] == '.')
				return isIPv4(IP) ? "IPv4" : "Neither";
			else   if (IP[i] == ':')
				return isIPv6(IP) ? "IPv6" : "Neither";
			else if(i==IP.length()-1)
				return "Neither";
		}
	}
};

 

标签:count,false,468,temp,验证,int,IP,IP地址,return
来源: https://blog.csdn.net/Scarlett_Guan/article/details/99186437