题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
#include <cstddef> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ string solve(string IP) { // write code here // IPV4的规则是数字0-255, 01不合法 // IPV6的规则是四位,每位0-9,a-f // :: 不合法 // 首先检查是不是IPV4/IPV6 if(IP.find('.')!=string::npos){ // 说明是IPV4 string subStr = IP; int index = 0; vector<string> strList; // 先将四个字符串取出来 while(subStr.find('.')!=string::npos){ int x = subStr.find('.'); strList.push_back(subStr.substr(index, x-index)); subStr = subStr.substr(x+1); } strList.push_back(subStr); for(string t : strList) cout<<t<<","; cout<<endl; if(strList.size()!=4){ return "Neither"; } for(int i=0; i<4;i++){ string tmp = strList[i]; if((tmp.size()!=1&&tmp[0]=='0')||tmp.size()==0){ return "Neither"; } else{ for(char i : tmp){ if(!isdigit(i)){ return "Neither"; } } int num = stoi(tmp); cout<<"num"<<num<<endl; if(num<=255&&num>=0){ continue; } else{ return "Neither"; } } } return "IPv4"; } if(IP.find(':')!=string::npos){ string subStr = IP; int index = 0; vector<string> strList; // 先将四个字符串取出来 while(subStr.find(':')!=string::npos){ int x = subStr.find(':'); strList.push_back(subStr.substr(index, x-index)); subStr = subStr.substr(x+1); } strList.push_back(subStr); for(string t : strList) cout<<t; cout<<endl; if(strList.size()!=8){ return "Neither"; } for(int i=0; i<8;i++){ string tmp = strList[i]; if(tmp.size()==0||tmp.size()>4){ return "Neither"; } for(char i : tmp){ if(!isxdigit(i)){ return "Neither"; } } } return "IPv6"; } return "Neither"; } };