classSolution{public:stringvalidIPAddress(stringIP){stringdigit;istringstreamiss(IP);if(count(begin(IP),end(IP),'.')==3){for(inti=0;i<4;++i)// Make sure we have 4 partsif(!getline(iss,digit,'.')||!isIPv4(digit))return"Neither";return"IPv4";}if(count(begin(IP),end(IP),':')==7){for(inti=0;i<8;++i)// Make sure we have 8 partsif(!getline(iss,digit,':')||!isIPv6(digit))return"Neither";return"IPv6";}return"Neither";}private:staticinlinestringvalidIPv6Chars="0123456789abcdefABCDEF";boolisIPv4(conststring&digit){if(digit.empty()||digit.length()>3)returnfalse;if(digit.length()>1&&digit[0]=='0')returnfalse;for(constcharc:digit)if(c<'0'||c>'9')returnfalse;constintnum=stoi(digit);return0<=num&&num<=255;}boolisIPv6(conststring&digit){if(digit.empty()||digit.length()>4)returnfalse;for(constcharc:digit)if(validIPv6Chars.find(c)==string::npos)returnfalse;returntrue;}};