[华为机试练习题]54.判断任意两台计算机的IP地址是否属于同一子网络-阿里云开发者社区

开发者社区> sjf0115> 正文

[华为机试练习题]54.判断任意两台计算机的IP地址是否属于同一子网络

简介:
+关注继续查看

题目

描述:

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。

请看以下示例:
运算演示之一:

IP地址:192.168.0.1
子网掩码:255.255.255.0
AND运算
转化为二进制进行运算:
IP地址:11010000.10101000.00000000.00000001 
子网掩码:11111111.11111111.11111111.00000000 
AND运算:11010000.10101000.00000000.00000000 
转化为十进制后为: 192.168.0.0

运算演示之二:

IP地址:192.168.0.254 
子网掩码:255.255.255.0 
AND运算
转化为二进制进行运算:
IP地址:11010000.10101000.00000000.11111110 
子网掩码:11111111.11111111.11111111.00000000 
AND运算:11010000.10101000.00000000.00000000 
转化为十进制后为:192.168.0.0

通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。

接口说明
原型:

int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);

输入参数:

char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”
char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”
char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”

返回值:

0:IP1与IP2不属于同一子网络。
1:IP1与IP2属于同一子网络。

练习阶段:

初级 

代码

/*---------------------------------------
*   日期:2015-07-05
*   作者:SJF0115
*   题目:判断任意两台计算机的IP地址是否属于同一子网络 
*   来源:华为机试练习题
-----------------------------------------*/
#include <iostream>
#include "OJ.h"
#include <string>
#include <vector>
using namespace std;

/*
功能: 判断两台计算机IP地址是同一子网络。
原型:
    int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);

输入参数:
    char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”;
    char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”;
    char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”;

返回值:
    0:IP1与IP2不属于同一子网络;
    1:IP1与IP2属于同一子网络;
*/

// 检查子网掩码和IP格式是否正确 并返回分段
bool CheckIP(string str,vector<int> &numVec){
    int size = str.size();
    int pointCount = 0;
    string::size_type index = 0;
    int prePoint = 0;
    vector<string> part;
    while((index = str.find_first_of('.',index)) != string::npos){
        //..之间有数字
        if(index > prePoint){
            part.push_back(str.substr(prePoint,index-prePoint));
        }//if
        ++index;
        prePoint = index;
        ++pointCount;
    }//while
    if(prePoint < size){
        part.push_back(str.substr(prePoint));
    }//if

    int partSize = part.size();
    if(partSize != 4){
        return false;
    }//if

    // 判断每一部分均属于0-255
    int num;
    for(int i = 0;i < partSize;++i){
        num = atoi(part[i].c_str());
        numVec.push_back(num);
        if(num < 0 || num > 255){
            return false;
        }//if
    }//for
    // 代表错误IP
    if(pointCount != 3){
        return false;
    }//if
    return true;
}

int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask){
    if(pcIp1 == NULL || pcIp2 == NULL || pcSubNetworkMask == NULL){
        return 0;
    }//if
    // 转换为string (自己习惯)
    string ip1(pcIp1);
    string ip2(pcIp2);
    string net(pcSubNetworkMask);
    vector<int> ip1Vec;
    vector<int> ip2Vec;
    vector<int> netVec;
    int result,result2;
    // ip 子网掩码 输入合法
    if(CheckIP(ip1,ip1Vec) && CheckIP(ip2,ip2Vec) && CheckIP(net,netVec)){
        for(int i = 0;i < 4;++i){
            result = ip1Vec[i] & netVec[i];
            result2 = ip2Vec[i] & netVec[i];
            if(result != result2){
                return 0;
            }//if
        }//for
    }//if
    else{
        return 0;
    }//else
    return 1;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9490 0
Android网络游戏之神农诀项目开发--视频观看地址
<a href="http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&amp;courseId=240570">Android网络游戏之神农诀项目开发</a><br>观看地址:<a href="http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&amp;c
1008 0
计算机网络学习笔记--网络层之IP地址与子网
IPv4地址:       我们知道在网络层(TCP/IP体系结构的网际互联层),最重要的一个协议就是IP协议,现在正处于IPv4和IPv6的过渡时期,但目前来说,IPv4仍为主流,所以主要讲Ipv4.
983 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13176 0
实用代码-C#获取本机网络适配器信息及MAC地址
System.Net.NetworkInformation空间提供对网络流量数据、网络地址信息和本地计算机的地址更改通知的访问。该命名空间还包含实现 Ping 实用工具的类。可以使用Ping和相关的类检查是否可通过网络连接到计算机。
554 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6888 0
+关注
sjf0115
Stay Hungry, Stay Foolish---我们必须用谦虚者的自觉,饥饿者的渴望的求职态度,来拥抱我们的未来。
788
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载