![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/01db7d26c0a12be8f246b75a590abceb.png#pic_center)
- **输入:
“172.16.254.1”
返回值:
“IPv4”
说明:
这是一个有效的 IPv4 地址, 所以返回 “IPv4” **
**输入:
“256.256.256.256”
返回值:
“Neither”
说明:
这个地址既不是 IPv4 也不是 IPv6 地址 **
**输入:
“256.256.256.256”
返回值:
“Neither”
说明:
这个地址既不是 IPv4 也不是 IPv6 地址 **
#include<bits/stdc++.h>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
vector<string> split(string s,string dev){
vector<string> res;
int it;
while ((it=s.find(dev))&&it!=string::npos) {
res.push_back(s.substr(0,it));
s=s.substr(it+1);
}
res.push_back(s);
return res;
}
bool is_ipv4(string&s){
if(s.size()<7||s[0]=='.'||s[s.length()-1]=='.') return false;
vector<string> str=split(s, ".");
if(str.size()!=4) return false;
for(int i=0;i<str.size();i++){
if(str[i].size()==0||str[i][0]=='0'&&str.size()>1||str[i].size()>3) return false;
int num=0;
for(int j=0;j<str[i].size();j++){
char c=str[i][j];
if(c<'0'||c>'9') return false;
num=num*10+(c-'0');
if(num>255) return false;
}
}
return true;
}
bool is_ipv6(string&s){
if(s.size()<15||s[0]==':'||s[s.length()-1]==':') return false;
vector<string> str=split(s,":");
if(str.size()!=8) return false;
for(int i=0;i<str.size();i++){
if(str[i].size()==0||str[i].size()>4) return false;
for(int j=0;j<str[i].size();j++){
char c=str[i][j];
if(!((c>='a'&&c<='f')||(c>='A'&&c<='F')||(c>='0'&&c<='9'))){
cout<<"我在这"<<endl;
return false;
}
}
}
return true;
}
string solve(string IP) {
int n=IP.find('.');
if(n!=string::npos){
if(is_ipv4(IP)){
return "IPv4";
}
else{
return "Neither";
}
}
n=IP.find(':');
if(n!=string::npos){
if(is_ipv6(IP)){
return "IPv6";
}
else{
return "Neither";
}
}
return "Neither";
}
Solution(){
}
};
int main(){
string s;
cin>>s;
Solution su;
s=su.solve(s);
cout<<s<<endl;
return 0;
}