主要使用一个函数,该函数负责将ip地址字符串转换成无符号的int型数据,并返回是否转换成功(格式是否正确);
#include <bits/stdc++.h>
using namespace std;
bool IpStrToUint(string &ip, unsigned int &num)
{
for(auto &c : ip)
{
if(c == '.')//转换成空格方便读取
{
c = ' ';
}
}
stringstream ss(ip);
vector<int> seg;
unsigned int val = 0;
while(ss >> val)
{
seg.push_back(val);//读取数据
}
if(seg.size() != 4)//判断长度
{
return false;
}
for(auto i : seg)//判断大小
{
if(i > 255 || i < 0)
{
return false;
}
}
num = seg[0] << 24 | seg[1] << 16 |seg[2] << 8 | seg[3] << 0;//组合成32位无符号数
return true;
}
int main()
{
string mask, ip1, ip2;
while(cin >> mask >> ip1 >> ip2)
{
unsigned int num1, num2, masknum;
if(IpStrToUint(ip1, num1) && IpStrToUint(ip2, num2) && IpStrToUint(mask, masknum))//格式是否正确
{
if((num1 & masknum) == (num2 & masknum))//是否属同一子网
{
cout << "0" << endl;
}
else
{
cout << "2" << endl;
}
}
else
{
cout << "1" << endl;
}
}
}
京公网安备 11010502036488号