一:解题思路
子网掩码是用来判断任意两台计算机的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; }