华为OJ判断两个IP是否属于同一子网
2017-03-25 21:57
465 查看
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。 子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。示例: I P 地址 192.168.0.1 子网掩码 255.255.255.0转化为二进制进行运算:I P 地址 11010000.10101000.00000000.00000001 子网掩码 11111111.11111111.11111111.00000000AND运算 11000000.10101000.00000000.00000000转化为十进制后为: 192.168.0.0 I P 地址 192.168.0.254 子网掩码 255.255.255.0 转化为二进制进行运算:I P 地址 11010000.10101000.00000000.11111110 子网掩码 11111111.11111111.11111111.00000000AND运算 11000000.10101000.00000000.00000000转化为十进制后为: 192.168.0.0通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。/* * 功能: 判断两台计算机IP地址是同一子网络。 * 输入参数: String Mask: 子网掩码,格式:“255.255.255.0”; * String ip1: 计算机1的IP地址,格式:“192.168.0.254”; * String ip2: 计算机2的IP地址,格式:“192.168.0.1”; * * 返回值: 0:IP1与IP2属于同一子网络; 1:IP地址或子网掩码格式非法; 2:IP1与IP2不属于同一子网络 */ public int checkNetSegment(String mask, String ip1, String ip2) { /*在这里实现功能*/ return 0; }#include <iostream> #include <string> #include <algorithm> #include <vector> #include <set> #include <math.h> using namespace std; vector<string> split(string str, string pattern) { string::size_type pos; vector<string> result; str += pattern; int size = str.size(); for (int i = 0; i<size; i++) { pos = str.find(pattern, i); if (pos<size) { std::string s = str.substr(i, pos - i); result.push_back(s); i = pos + pattern.size() - 1; } } return result; } bool isValid(string str) { int value = 0; for (int i = 0; i < str.size(); i++) { if (isdigit(str[i])) { value = value * 10 + str[i] - '0'; } else return false; } if (value <= 255) return true; else return false; } int strToInt(string str) { int value = 0; for (int i = 0; i < str.size(); i++) { value = value * 10 + str[i] - '0'; } return value; } int checkNetSegment(string mask, string ip1, string ip2) { string pattern("."); vector<string> maskVec = split(mask, pattern); vector<string> ip1Vec = split(ip1, pattern); vector<string> ip2Vec = split(ip2, pattern); if (!(maskVec.size() == 4 && ip1Vec.size() == 4 && ip2Vec.size() == 4)) return 1; for (int i = 0; i <maskVec.size(); i++) { if (!isValid(maskVec[i])) return 1; } for (int i = 0; i <ip1Vec.size(); i++) { if (!isValid(ip1Vec[i])) return 1; } for (int i = 0; i <ip2Vec.size(); i++) { if (!isValid(ip2Vec[i])) return 1; } for (int i = 0; i < 4; i++) { if ((strToInt(ip1Vec[i])&strToInt(maskVec[i])) != (strToInt(ip2Vec[i])&strToInt(maskVec[i]))) return 2; } return 0; } int main(void) { string mask, ip1, ip2; cin >> mask >> ip1 >> ip2; cout << checkNetSegment(mask, ip1, ip2); } |
相关文章推荐
- 华为OJ——判断两个IP是否属于同一子网
- 华为OJ——判断两个IP是否属于同一子网
- 华为oj_判断两个IP是否属于同一子网
- 【华为OJ】判断两个IP是否属于同一子网
- [华为OJ--C++]075-判断两个IP是否属于同一子网
- [华为OJ] 判断两个IP是否属于同一子网
- 华为OJ基础篇-判断两个IP是否属于同一子网
- 华为OJ:判断两个IP是否属于同一子网
- 华为oj 判断两个IP是否属于同一子网
- 华为OJ 初级:判断两个IP是否属于同一子网
- 华为OJ:判断两个IP是否属于同一子网
- 华为OJ:判断两个IP是否属于同一子网
- 【华为OJ】【075-判断两个IP是否属于同一子网】
- 华为OJ——判断两个IP是否属于同一子网
- 华为OJ--判断两个IP是否属于同一个子网
- 华为OJ-判断两个IP是否在同一子网
- 华为机试在线训练-牛客网(23)判断两个IP是否属于同一子网
- 华为oj:判断两个IP是否属于同一个子网
- Java-NowCoder-判断两个IP是否属于同一子网
- 华为机试-判断两个IP是否属于同一个子网