主要使用一个函数,该函数负责将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; } } }