题目描述:
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
示例:
I P 地址: 192.168.0.1子网掩码: 255.255.255.0
转化为二进制进行运算:
IP地址: 11010000.10101000.00000000.00000001
子网掩码: 11111111.11111111.11111111.00000000
AND运算: 11000000.10101000.00000000.00000000
转化为十进制后为: 192.168.0.0
I P 地址 192.168.0.254
子网掩码 255.255.255.0
转化为二进制进行运算:
IP地址: 11010000.10101000.00000000.11111110
子网掩码: 11111111.11111111.11111111.00000000
AND运算: 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;
}
知识点: 字符串
输入:
输入子网掩码
ip地址1
ip地址2
得到计算结果
样例输入:
255.255.255.0
192.168.224.256
192.168.10.4
样例输出:
1
代码:
#include <iostream>
#include <string>
using namespace std;
void Transfer(string str, int len, int num[])
{
for (int i = 0, j = 0; i<4; i++, j++)
while (j<len&&str[j] != '.')
{
num[i] = num[i] * 10 + str[j] - '0';
j++;
}
}
int Judge(int num[])
{
for (int i = 0; i<4; i++)
if (num[i]>255)
return 1;
return 0;
}
int main()
{
string sub, ip1, ip2;
getline(cin,sub); int lens = sub.size();
getline(cin,ip1); int len1 = ip1.size();
getline(cin,ip2); int len2 = ip2.size();
int s[4] = { 0 }, p1[4] = { 0 }, p2[4] = {0};
Transfer(sub, lens, s);
Transfer(ip1, len1, p1);
Transfer(ip2, len2, p2);
if (Judge(s) || Judge(p1) || Judge(p2))
{
cout << 1 << endl;
return 0;
}
for (int i = 0; i<4; i++)
if ((s[i] & p1[i]) != (s[i] & p2[i]))
{
cout << 2 << endl;
return 0;
}
cout << 0 << endl;
return 0;
}
得分 | 运行时间 | 内存 | 复杂度 | 最大嵌套深度 |
100(100) | 16ms | 2052KB | 6 | 3 |