判斷兩個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