题解 | #判断两个IP是否属于同一子网#

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

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

先判断子网掩码的正确性,之后再判断两个ip的正确性,代码通俗易懂

#include<iostream>
#include<sstream>
#include<vector>
#include<string>

using namespace std;

int isbelong(vector<int> &mask, vector<int> &ip1, vector<int> &ip2){
    for(int i = 0; i <4; i++){
        if((mask[i]&ip1[i]) != (mask[i]&ip2[i]))return 2;
    }
    return 0;
}

vector<int> ismask(string input){
    stringstream iss(input);
    string temp;
    unsigned m = 0;
    vector<int> mask;
    while(getline(iss, temp, '.')){
        m = (m<<8) + stoi(temp);
        mask.emplace_back(stoi(temp));
    }

    if(m == 0 || (m^(m-1)) == 1 || ((m&(m-1)) != (m<<1)) ){//判断子网掩码网络号是否全1,主机号是否全0
        mask.clear();              //子网掩码全0或者全1都不行
    }
    return mask;
    
}
vector<int> isip(string input){
    stringstream iss(input);
    string temp;
    vector<int> ip;
    while(getline(iss, temp, '.')){
        ip.emplace_back(stoi(temp));
    }
    for(auto i:ip){
        if(i < 0 || i >255){
            ip.clear();
            break;
        }
    }
    return ip;
}

int main(){
    string inputs[3];
    while(cin>>inputs[0]>>inputs[1]>>inputs[2]){
        vector<int> mask = ismask(inputs[0]);
        if(mask.empty() || mask.size() != 4){
            cout<<1<<endl;
            continue;
        }
        vector<int> ip1 = isip(inputs[1]);
        if(ip1.empty() || ip1.size() != 4){
            cout<<1<<endl;
            continue;
        }
        vector<int> ip2 = isip(inputs[2]);
        if(ip2.empty() || ip2.size() != 4){
            cout<<1<<endl;
            continue;
        }
        cout<<isbelong(mask, ip1, ip2)<<endl;
    }
    return 0;
}
全部评论
牛的,简洁易懂
点赞 回复 分享
发布于 2024-03-12 19:54 上海
if(m == 0 || (m^(m-1)) == 1 || ((m&(m-1)) != (m<<1)) )大佬能具体解释一下为什么满足这三个条件之一,子网掩码就不合法吗
点赞 回复 分享
发布于 2023-05-14 17:00 江苏
(m^(m-1)) 这种算法真的,学到了。
点赞 回复 分享
发布于 2022-07-03 16:18

相关推荐

06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
评论
7
1
分享

创作者周榜

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