判断两台计算机IP地址是同一子网络

判断两个IP是否属于同一子网

http://www.nowcoder.com/questionTerminal/34a597ee15eb4fa2b956f4c595f03218

主要使用一个函数,该函数负责将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;
        }
    }
}
全部评论
没有判断子网掩码是否合法(连续1之后连续0),通不过此用例: 254.255.0.0 85.122.52.249 10.57.28.117
1 回复 分享
发布于 2020-12-09 23:11

相关推荐

每晚夜里独自颤抖:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
牛客ID:561366855:期望薪资多少?难以相信这简历找不到工作。说明二本电子信息专业想对口就业非常难。
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务