HJ39判断两个IP是否属于同一子网(下)

提示:文章

文章目录

  • 前言
  • 一、背景
  • 二、
    • 2.1
    • 2.2
  • 总结

前言

接上文:HJ39判断两个IP是否属于同一子网(中)


先全部获取完输入再处理数据

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>bool isTargetSonNet(int array[], int len)
{int tempArray[32] = {0};int tempArrayIndex = 0;for(int i = 0; i < len; i++){int data = array[i];if(data > 255 || data < 0){return false;}int index = ((tempArrayIndex + 1) * 8);while(data){int dat = data % 2;tempArray[--index] = dat;data /= 2;}tempArrayIndex++;}int count = 0;for(int i = 0; i + 1 < 32; i++){int temp = tempArray[i] - tempArray[i + 1];if(temp != 0 && temp != 1){return false;}if(temp == 1){count++;}}if(count != 1){return false;}return true;
}int main() {int a, b;char sonNet[20] = {'\0'};char ip1[20] = {'\0'};char ip2[20] = {'\0'};int arraySonNet[4] = {0};int arrayIp1[4] = {0};int arrayIp2[4] = {0};while (scanf("%s", sonNet) != EOF) { // 注意 while 处理多个 caseif(strlen(sonNet) < 4){return 0;}// 64 位输出请用 printf("%lld") to char output = 'f';char delimiters[2] = ".";char* p = strtok(sonNet, delimiters);int index = 0;while(p != NULL){//printf("%s\n", p);int data = atoi(p);// if(data > 255)// {//     output = '1';//     break;// }// else if(data != 255 && data != 0)// {//     output = '1';//     break;// }arraySonNet[index++] = data;p = strtok(NULL, delimiters);}if(!isTargetSonNet(arraySonNet, 4)){output = '1';}if(output != 'f'){goto RESULT;}if(scanf("%s", ip1) != EOF){p = strtok(ip1, delimiters);int index = 0;while(p != NULL){//printf("%s\n", p);int data = atoi(p);if(data > 255 || data < 0){output = '1';break;}arrayIp1[index++] = data;p = strtok(NULL, delimiters);}}if(output != 'f'){goto RESULT;}if(scanf("%s", ip2) != EOF){p = strtok(ip2, delimiters);int index = 0;while(p != NULL){//printf("%s\n", p);int data = atoi(p);if(data > 255 || data < 0){output = '1';break;}arrayIp2[index++] = data;p = strtok(NULL, delimiters);}}if(output != 'f'){goto RESULT;}int count = 0;for(int i = 0; i < 4; i++){if( (ip1[i] & sonNet[i]) == (ip2[i] & sonNet[i]) ){++count;}}if(output == 'f'){if(count == 4){output = '0';}else {output = '2';}}RESULT:printf("%c\n", output);}return 0;
}

最终修改成如下的代码,全部通过实例,Ace了。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>bool isTargetSonNet(int array[], int len)
{int tempArray[32] = {0};int tempArrayIndex = 0;for(int i = 0; i < len; i++){int data = array[i];if(data > 255 || data < 0){return false;}int index = ((tempArrayIndex + 1) * 8);while(data){int dat = data % 2;tempArray[--index] = dat;data /= 2;}tempArrayIndex++;}int count = 0;for(int i = 0; i + 1 < 32; i++){int temp = tempArray[i] - tempArray[i + 1];if(temp != 0 && temp != 1){return false;}if(temp == 1){count++;}}if(count != 1){return false;}return true;
}int main() {int a, b;char sonNet[20] = {'\0'};char ip1[20] = {'\0'};char ip2[20] = {'\0'};int arraySonNet[4] = {0};int arrayIp1[4] = {0};int arrayIp2[4] = {0};while (scanf("%s", sonNet) != EOF) { // 注意 while 处理多个 case// 64 位输出请用 printf("%lld") to scanf("%s", ip1);scanf("%s", ip2);char output = 'f';char delimiters[2] = ".";char* p = strtok(sonNet, delimiters);int index = 0;while(p != NULL){int data = atoi(p);arraySonNet[index++] = data;p = strtok(NULL, delimiters);}if(!isTargetSonNet(arraySonNet, 4)){output = '1';goto RESULT;}p = strtok(ip1, delimiters);index = 0;while(p != NULL){//printf("%s\n", p);int data = atoi(p);if(data > 255 || data < 0){output = '1';goto RESULT;}arrayIp1[index++] = data;p = strtok(NULL, delimiters);}p = strtok(ip2, delimiters);index = 0;while(p != NULL){//printf("%s\n", p);int data = atoi(p);if(data > 255 || data < 0){output = '1';goto RESULT;}arrayIp2[index++] = data;p = strtok(NULL, delimiters);}int count = 0;for(int i = 0; i < 4; i++){if( (ip1[i] & sonNet[i]) == (ip2[i] & sonNet[i]) ){++count;}}if(count == 4){output = '0';}else {output = '2';}RESULT:printf("%c\n", output);}return 0;
}

3、总结

3.1 atoi可以转换带符号变量

3.2 strtok写法一开始不会写了

3.3 掩码网络号的处理

3.4 使用了goto语句,是否还有其他好的解决方法。

三、

3.1


总结

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【postgresql初级使用】触发器的enable与disable,可以自动化精准管理触发器,避免重写触发器复杂逻辑

触发器的enable与disable ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录…

小白如何重装系统win10?电脑一键重装系统傻瓜式操作!超详细步骤!

随着电脑的广泛应用&#xff0c;给笔记本/台式电脑系统重装已成为一项基本技能。对于电脑新手而言&#xff0c;如何重装Win10系统&#xff0c;或者更高版本的Win11系统可能是一个巨大的挑战。如果对电脑重装系统刚好有需要了解的小伙伴&#xff0c;不妨看看下面的干货分享。本文…

MySQL版本发布模型

MySQL 8.0 之后使用了新的版本控制和发布模型&#xff0c;分为两个主线&#xff1a;长期支持版&#xff08;LTS&#xff09;以及创新版。这两种版本都包含了缺陷修复和安全修复&#xff0c;都可以用于生产环境。 下图是 MySQL 的版本发布计划&#xff1a; 长期支持版 MySQL…

数据预处理与特征工程、过拟合与欠拟合

数据预处理与特征工程 常用的数据预处理步骤 向量化&#xff1a;将数据转换成pytorch张量值归一化&#xff1a;将特定特征的数据表示成均值为0&#xff0c;标准差为1的数据的过程&#xff1b;取较小的值&#xff1a;通常在0和1之间&#xff1b;相同值域处理缺失值特征工程&am…

java 线程之间通信-volatile 和 synchronized

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

“代码输出”

日文&#xff1a; コード出力 假名&#xff1a; コードしゅつりょく (kōdo shutsuryoku) コード (kōdo) - 代码出力 (しゅつりょく, shutsuryoku) - 输出 汉语&#xff1a; “代码输出”

欢度盛夏,畅享清凉——七月超市营销策略

随着七月的到来&#xff0c;我国大部分地区进入夏季&#xff0c;气温逐渐攀升&#xff0c;消费者们对清凉、消暑产品的需求也随之增长。在这个夏日&#xff0c;超市应该如何抓住这一商机&#xff0c;提升销售业绩呢&#xff1f;本文将从商品陈列、促销活动等方面&#xff0c;为…

MySQL-创建表~数据类型

070-创建表 create table t_user(no int,name varchar(20),gender char(1) default 男);071-插入数据 语法格式&#xff1a; insert into 表名(字段名1, 字段名2, 字段名3,......) values (值1,值2,值3,......);insert into t_user(no, name, gender) values(1, Cupid, 男);字…

OpenCV中的圆形标靶检测——findCirclesGrid()(三)

前面说到cv::findCirclesGrid2()内部先使用SimpleBlobDetector进行圆斑检测,然后使用CirclesGridClusterFinder算法类执行基于层次聚类的标靶检测。如下图所示,由于噪声的影响,SimpleBlobDetector检出的标靶可能包含噪声。 而CirclesGridClusterFinder算法类会执行基…

资源宝库网站!人人必备的神器!

面对网络中海量的内容&#xff0c;一个高效、便捷的网络导航工具&#xff0c;可以帮助我们快速查找使用网络资源。无论是职场精英还是学生党&#xff0c;使用导航网站都可以帮助我们提升效率。下面小编就来和大家分享一款资源宝库网站-办公人导航-实用的办公生活导航网站&#…

计算机网络:运输层 - TCP 流量控制 拥塞控制

计算机网络&#xff1a;运输层 - TCP 流量控制 & 拥塞控制 滑动窗口流量控制拥塞控制慢开始算法拥塞避免算法快重传算法快恢复算法 滑动窗口 如图所示&#xff1a; 在TCP首部中有一个窗口字段&#xff0c;该字段就基于滑动窗口来辅助流量控制和拥塞控制。所以我们先讲解滑…

实验室数字化转型:青软青之LIMS系统助力提升检测效率与数据管理

随着检测需求的日益增长和业务的不断扩展&#xff0c;实验室中工作量急剧上升。从而带来了不少挑战&#xff1a; 实验室中的人员、设备管理混乱&#xff0c;部门协作困难&#xff1b;实验数据分析和存储难以协同管理&#xff0c;容易造成错漏&#xff0c;导致数据准确性难以保…

MATLAB 在大规模数据分析和处理中的性能优化策略有哪些?

MATLAB在大规模数据分析和处理中具有一些性能优化策略&#xff0c;其中包括以下几个方面&#xff1a; 1.矢量化向量化操作&#xff1a;使用矢量化向量化操作能够同时处理多个数据点&#xff0c;减少循环的数量&#xff0c;提高程序的效率。 2.使用函数和内置函数&#xff1a;…

xcode报错合集,你都遇到过哪些跳不过的坑

1.报错Consecutive declarations on a line must be separated by ; 其实我这里是用因为创建了一个结构体&#xff0c;然后在没有使用State的情况下&#xff0c;修改它的属性了 当然加上State依然报错&#xff1a; 应该在UI事件中修改&#xff1a;

特种设备高处安装维护拆除作业精选历年试题

高处安装、维护、拆除作业人员资格考试题库[含答案] 单选题 1.大型运动设施拆除工程开工前,根据工程特点、设备、设施情况、工程量等编制( )。 A、安全专项方案 B、安全交底 C、拆除预算 正确答案:A 2.“卡缸”是因为压缩机润滑油( )了的情况下才会出现的现象。 A、多 …

杭州电子科技大学2024年成人高等继续教育招生简章

杭州电子科技大学&#xff0c;作为一所享有盛誉的高等学府&#xff0c;始终致力于为社会培养优秀的人才。2024年&#xff0c;学校敞开大门&#xff0c;为广大有志于进一步提升自身学识与技能的成年人提供了难得的机会——成人高等教育招生。 此次招生不仅彰显了杭州电子科技大…

Python开发记录--手撸加解密小工具(1)

目录 1.环境搭建 2. PyQt简介 3.小结 最近考虑设计一个涵盖国际、国家等加密算法的小工具&#xff0c;用于组内测试使用。一来回顾下算法&#xff0c;二来很久没写代码得练练手感&#xff0c;给工具取个名字&#xff1a;MuscleV0.1 MuscleV0.1涵盖的算法&#xff1a; 对称算…

数据分析:RT-qPCR分析及R语言绘图

介绍 转录组分析是一种用于研究细胞或组织中所有RNA分子的表达水平的高通量技术。完成转录组分析后&#xff0c;科学家们通常需要通过定量实时聚合酶链式反应&#xff08;qRT-PCR&#xff09;来验证二代测序&#xff08;Next-Generation Sequencing, NGS&#xff09;结果的可靠…

多品类第一!海尔智家618战绩出炉

618已经收官&#xff0c;从今年各大平台取消预售机制、简化流程等新动作来看&#xff0c;“回归用户”成为重中之重。而海尔智家从未离开用户&#xff0c;“以用户为中心”始终是海尔智家不变的坚持。 正因如此&#xff0c;今年618&#xff0c;海尔智家又把“第一”收入囊中。…

.NET C# 八股文 代码阅读(一)

.NET C# 八股文 代码阅读&#xff08;一&#xff09; 目录 .NET C# 八股文 代码阅读&#xff08;一&#xff09;1 两种获10000个数的方式&#xff0c;哪种效率更高&#xff1f;为什么&#xff1f;2 请说出以下代码AB谁先打印&#xff0c;AB打印的值分别为多少&#xff1f;3 关于…