题目:

一个IPV4的网络地址,通常可以划分为网络号和主机号,网络号相同的两台主机位于同一个子网,为了方便快速的确定一个地址所在的子网,我们通常需要提供一个IP地址的子网掩码,用这个子网掩码与给定的IPV4地址做按位与(&)得到的就是网络号:
IP地址:172.18.155.33,子网掩码:255.255.0.0,网络号:172.18.0.0
IP地址:172.18.155.33,子网掩码:255.255.255.0,网络号:172.18.155.0
假定用户输入两个IPV4地址,请实现以下函数,求出子网掩码,使得两个IP地址处于同一子网中,并且该子网为满足条件的最小子网(能分配的主机最少)。
Std::string CalculateNetmask(const char* lhs, const char* rhs);

输入描述:
输入两个合法的IPV4地址字符串。
输出描述:
满足条件的子网掩码。

分析:从左->右,将两个ip地址对应位相同的位,对应子网掩码的位就是1,找到第一个不相同的到后面所有的对应的子网掩码是0,最后将二进制比特位转为点分十进制即可

//将8位二进制比特位->十进制数字
int GetSum(string& s)
{int ret = 0;for (int i = 7; i >=0; i--){ret = ret + ((s[i] - '0') * pow(2, 7-i));}return ret;
}string mask(const char* str1, const char* str2)
{string s1 = str1;//ip地址1string s2 = str2;//ip地址2vector<int> ret1;//存放ip地址1的点分十进制数vector<int> ret2;//存放ip地址2的点分十进制//初始化这两个vectorint i = 0;int end1 = 0;while ((i < s1.size()) && (end1 != -1)){int begin1 = i;end1 = s1.find('.', i);//找到i的下标string sub1;if (end1 == -1){sub1 = s1.substr(begin1, s1.size() - begin1);}else{sub1 = s1.substr(begin1, end1);}const char* s_sub1 = sub1.c_str();int subdigit1 = atoi(s_sub1);ret1.push_back(subdigit1);i = end1 + 1;}i = 0;int end2 = 0;while ((i < s2.size()) && (end2 != -1)){int begin2 = i;end2 = s2.find('.', i);//找到i的下标string sub2;if (end2 == -1){sub2 = s2.substr(begin2, s2.size() - begin2);}else{sub2 = s2.substr(begin2, end2);}const char* s_sub2 = sub2.c_str();int subdigit2 = atoi(s_sub2);ret2.push_back(subdigit2);i = end2 + 1;}//将两个ip地址相同的位将对应的子网掩码置为1string ret;//二进制的子网掩码串bool flag = true;for (int i = 0; i < ret1.size(); i++){for (int j = 7; j >= 0; j--){if (((ret1[i] >> j)&1) == ((ret2[i] >> j)&1)){ret += '1';}else{ret += '0';flag = false;break;}}if (flag == false)break;}int left = 32 - ret.size();for (int i = 0; i < left; i++){ret += '0';}string result;//子网掩码点分十进制表示for (int i = 0; i < ret.size(); i+=8){string s = ret.substr(i, 8);int sum = GetSum(s);result += to_string(sum);if(i < ret.size()-8)result += '.';}return result;
}

一个IPV4的网络地址,通常可以划分为网络号和主机号,网络号相同的两台主机位于同一个子网,为了方便快速的确定一个地址所在的子网,我们通常需要提供一个IP地址的子网掩码,用这个子网掩码与给定的IPV4地相关推荐

  1. 计算机网络—一个自治系统有5个局域网,其连接图如图所示。LAN2至LAN5上的主机数分别为:91,150,3,15。该自治系统分配到的IP地址块为30.138.118/23。试给出每一个局域网的地址块

    计算机网络:一个自治系统有5个局域网,其连接图如图所示.LAN2至LAN5上的主机数分别为:91,150,3,15.该自治系统分配到的IP地址块为30.138.118/23.试给出每一个局域网的地址块 ...

  2. 每台计算机用户都有一个独有的,因特网上的每台正式计算机用户都有一个独有的()。A.Mac地址B.网络号C.主机号D.IP地址...

    因特网上的每台正式计算机用户都有一个独有的().A.Mac地址B.网络号C.主机号D.IP地址 更多相关问题 [问答题] 作物播种期由哪些因素决定? [多选] 薄膜覆盖栽培技术适用于() [判断题] ...

  3. 怎么计算计算机的网络地址,如何计算IP地址的网络号和主机号?

    http://www.cnblogs.com/Jessy/archive/2011/12/29/2306334.html 2011 IP地址与网络分类 (1)IP地址 不同的物理网络技术有不同的编址方 ...

  4. ip地址中的网络号,主机号

    ip地址中的网络号,主机号 IP地址分类 A:0.0.0.0~127.255.255.255 B:128.0.0.0~191.255.255.255 C:192.0.0.0~223.255.255.2 ...

  5. 子网划分-详解为何两台主机网络掩码不一致却能ping通

    可参考:子网划分方法和例题详解_wj31932的博客-CSDN博客_ip子网划分方法 网络地址不同,没有网关,为什么直接能ping通?      看到网上有人问网络地址不同的两台pc,没配置网关,为啥 ...

  6. 计算机网络 ,ip地址(网络号,主机号),网关,路由

    一.ip,网络号,主机号 1.ip:用来唯一标识互联网中的一个网络或一台主机. 2.网络号:ip地址包含了网络号(与子网掩码相与),主机号,主机可以与具有相同的网络号的设备直接通讯,在没有连接设备的情 ...

  7. 根据子网掩码算出 IP 地址 的网络号和主机号

    我们如何根据子网掩码算出 IP 地址 的网络号和主机号呢? 举个例子,比如 10.100.122.0/24,后面的/24表示就是 255.255.255.0 子网掩码,255.255.255.0 二进 ...

  8. 根据IP地址和子网掩码求网络号、主机号

    一.理论阐述 目前,IP地址主要使用32位的二进制来表示,即IPv4地址.由于32位二进制不容易记忆和书写,故采用点分十进制形式来表示IP地址.IP地址由两部分组成{<网络号>,<主 ...

  9. 找到特定ip地址 修改ip_您如何找到网站的IP地址?

    找到特定ip地址 修改ip Whether you are in it just for a bit of geeky fun, or are seriously wanting to know th ...

最新文章

  1. 2011 IBM IIS:聚百年智慧精髓 筑最优信息架构
  2. 传感器实训心得体会_传感器实训心得
  3. 为你的亚马逊S3 bucket加个安全盖
  4. Tomcat源码学习(4)-How Tomcat works(转)
  5. 重磅 |“金砖”电商报告:5年后金砖五国网络零售将超3万亿美元
  6. C语言中的数据类型及其转换详解
  7. 分享一个点赞超过100的漂亮ASP.NET MVC蓝色界面框架
  8. 一条nginx命令引发的对于容器的思考
  9. 前端学习(810):webapi和js的关联性
  10. LeetCode 1696. 跳跃游戏 VI(优先队列 / 单调队列)
  11. 烟台市与拼多多达成战略合作 启动烟台优品线上云购节活动
  12. echarts 折线图阴影颜色渐变
  13. 自学Python八 爬虫大坑之网页乱码
  14. 第一章:T-SQL查询与编程基础
  15. DOM节点的属性及文本操作
  16. 《C语言及程序设计》实践参考——太乐了
  17. Unity3D《打地鼠》学习笔记及心得
  18. 高德地图API总结--Marker多点聚合
  19. 螺栓扭矩查找表excel下载
  20. NameError: name 'mnist' is not defined

热门文章

  1. 关于如何让Excel表中输入的数值自动做乘法运算
  2. Jenkin安装与使用
  3. babel-core 和 babel-loder的作用
  4. 算法交易是指使用计算机,量化投资(下篇)——程序化交易 100分题库及答案...
  5. 机器学习需要哪些基础知识?
  6. Remoting安全设置
  7. 二、8大数据类型、变量
  8. pytorch中的二分类及多分类交叉熵损失函数
  9. DIGITS运行时候遇到PicklingError的解决方法
  10. Vue打包部署出现白屏