我只是通过adhoc方法来检查IPV4和IPV6两种寻址方案的有效性:这是我的代码......我的代码总是欢迎更正。 如果我的解决方案有误,请原谅我。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
bool check6(string s)
{
for(int i=0;i
{
if((s[i] < '0' || s[i] > '9') && (s[i] < 'a' || s[i]> 'f') &&
(s[i] < 'A' || s[i] > 'F'))
return false;
}
return true;
}
bool check4(string s)
{
for(int i=0; i< s.length(); i++)
{
if(!(s[i]>= '0' && s[i] <= '9'))
return false;
}
stringstream ss(s);
int e;
ss >> e;
if( e < 0 || e > 255 )
return false;
else
return true;
}
int main()
{
string s;
cin>>s;
vector v;
int i=0;
int d=0;
if((s.find(":")!=std::string::npos ||
s.find("::")!=std::string::npos)&&
s.find(".")==std::string::npos)
{
int x=0;
while(i< s.length())
{
string s1 ="";
while(i< s.length() && s[i]!= ':')
{
s1+= s[i];
i++;
}
if(s1!="")
v.push_back(s1);
if((i+1)< s.length() && s[i]==':' && s[i+1]==':')
x++;
i++;
if(i< s.length())
d++;
}
if(x > 1 || d > 7 || v.size() > 8 || (x==1 && d >6))
{
cout<
return 0;
}
else if(d > 2 && v.size() ==0)
{
cout<
return 0;
}
else
{
for(int i=0;i< v.size();i++)
{
if((v[i]).length() > 4)
{
cout<
return 0;
}
else
{
if(!check6(v[i]))
{
cout<
return 0;
}
}
}
cout<
return 0;
}
}
else if(s.find(":")==std::string::npos && s.find(".")!=std::string::npos)
{
while(i< s.length())
{
string s1="";
while( i< s.length() && s[i]!='.')
{
s1+=s[i];
i++;
}
i++;
if(i< s.length())
d++;
v.push_back(s1);
}
if(d > 4 || v.size()> 4)
{
cout<
return 0;
}
else
{
for(int i=0;i
{
if((v[i]).length() > 3)
{
cout<
return 0;
}
if(!check4(v[i]))
{
cout<
return 0;
}
}
}
cout<
return 0;
}
cout<
return 0;
}