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