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


一:解题思路

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。

注意stringstream 的运用。

二:完整代码示例 (C++版和Java版)

C++代码:

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

using namespace std;

int main()
{
    vector<int> mask(4,0);
    string inputStr = "";
    char ch = ' ';
    stringstream ss;
    while (cin >> inputStr)
    {
        vector<int> ip1(4,0);
        vector<int> ip2(4,0);

        ss << inputStr;
        ss >> mask[0] >> ch >> mask[1] >> ch >> mask[2] >> ch >> mask[3];
        ss.clear();

        cin >> inputStr;
        ss << inputStr;
        ss >> ip1[0] >> ch >> ip1[1] >> ch >> ip1[2] >> ch >> ip1[3];
        ss.clear();

        cin >> inputStr;
        ss << inputStr;
        ss >> ip2[0] >> ch >> ip2[1] >> ch >> ip2[2] >> ch >> ip2[3];
        ss.clear();

        int flag = 0;

        for (int i = 0; i < 4; i++)
        {
            if (mask[i] < 0 || mask[i]>255 || ip1[i] < 0 || ip1[i]>255 || ip2[i] < 0 || ip2[i]>255)
            {
                cout << 1 << endl;
                flag = 1;
                break;
            }
        }

        if (flag != 1)
        {
            for (int i = 0; i < 4; i++)
            {
                if ((mask[i] & ip1[i]) == (mask[i] & ip2[i]))
                {
                    flag = 0;
                }
                else
                {
                    flag = 2;
                    break;
                }
            }
        }

        if (0 == flag)
            cout << 0 << endl;
        else if (2 == flag)
            cout << 2 << endl;
    }

    return 0;
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM