一:解題思路
子網掩碼是用來判斷任意兩台計算機的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; }