华为机试HJ18 识别有效的IP地址和掩码并进行分类统计
首先看一下题
描述
请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。
所有的IP地址划分为 A,B,C,D,E五类
A类地址从1.0.0.0到126.255.255.255;
B类地址从128.0.0.0到191.255.255.255;
C类地址从192.0.0.0到223.255.255.255;
D类地址从224.0.0.0到239.255.255.255;
E类地址从240.0.0.0到255.255.255.255
私网IP范围是:
从10.0.0.0到10.255.255.255
从172.16.0.0到172.31.255.255
从192.168.0.0到192.168.255.255
子网掩码为二进制下前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
(注意二进制下全是1或者全是0均为非法子网掩码)
注意:
1. 类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时请忽略
2. 私有IP地址和A,B,C,D,E类地址是不冲突的
输入描述:
多行字符串。每行一个IP地址和掩码,用~隔开。
请参考帖子https://www.nowcoder.com/discuss/276处理循环输入的问题。
输出描述:
统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。
示例1
输入:
10.70.44.68~255.254.255.0 1.0.0.1~255.0.0.0 192.168.0.2~255.255.255.0 19..0.~255.255.255.0输出:
1 0 1 0 0 2 1说明:
10.70.44.68~255.254.255.0的子网掩码非法,19..0.~255.255.255.0的IP地址非法,所以错误IP地址或错误掩码的计数为2; 1.0.0.1~255.0.0.0是无误的A类地址; 192.168.0.2~255.255.255.0是无误的C类地址且是私有IP; 所以最终的结果为1 0 1 0 0 2 1示例2
输入:
0.201.56.50~255.255.111.255 127.201.56.50~255.255.111.255输出:
0 0 0 0 0 0 0说明:
类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时请忽略
一、问题分析
1.解析IP地址和对应的掩码,进行分类识别。
2.按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。
3.一共有五类IP地址
A类地址从1.0.0.0到126.255.255.255;
B类地址从128.0.0.0到191.255.255.255;
C类地址从192.0.0.0到223.255.255.255;
D类地址从224.0.0.0到239.255.255.255;
E类地址从240.0.0.0到255.255.255.255;
私网IP的范围:
从10.0.0.0到10.255.255.255;
从172.16.0.0到172.31.255.255;
从192.168.0.0到192.168.255.255
4.子网掩码为二进制下前面是连续的1,然后全是0。
举例说明255.255.255.32是一个非法的掩码
因为它的二进制是11111111.11111111.1111111.00100000
不是全都连续
5.题目还提及了二进制下全是1或者全是0均为非法子网掩码
也就是说255.255.255.255和0.0.0.0是非法子网掩码
6.提及了两个注意的点
①类似于0.*.*.*和127.*.*.*的IP地址不属于上述输入的任何一类,也不属于不合法ip地址,计数时忽略
②私有IP地址和A,B,C,D,E类地址是不冲突的(也就是说一个地址他可以是A类私有也可是是A类公有)
7.输入描述:多行字符串,每行一个IP地址和掩码,用~隔开。
还提及了请参考帖子https://www.nowcoder.com/discuss/276处理循环输入的问题。
8.输出描述:统计A、B、C、D、E、错误IP地址或错误掩码、私有的IP的个数,之间以空格隔开。
9.通过读题我们的到题目大概的意思是输入一些IP和掩码,让我们来统计这些
IP和掩码的组合中A类地址,B类地址,C类地址,D类地址,E类地址,
错误的IP地址或错误掩码
以及私有的IP的个数
这些数字之间以空格隔开
10.我们来看一下示例1
10.70.44.68~255.254.255.0
1.0.0.1~255.0.0.0
192.168.0.2~255.255.255.0
19..0.~255.255.255.0
这个输入输入了四条IP和掩码组合
第一条是A类地址,但是掩码前面的部分不是连续的1,所以这是一个不合法的掩码(单独归类)
第二条是一个A类地址,且掩码前面8位都是1,所以是一个合法的A类地址,但他不是一个A类私有地址
第三条是一个C类地址,他的前24位掩码都是1,所以是一个合法的C类地址,而且他还是一个C类私有地址
第四条IP地址是错误的,所以计入错误IP地址或错误掩码
所以我们有1个A类地址,0个B类地址,1个C类地址,0个D类地址,0个E类地址,2个错误IP地址或错误掩码,1个私有IP
所以我们输出1 0 1 0 0 2 1
再来看一下示例2
0.201.56.50~255.255.111.255
127.201.56.50~255.255.111.255
第一条符合0.*.*.*它不属于任何一类,也不属于不合法ip地址,所以清零
第二条符合127.*.*.*也不属于任何一类,所以清零
所以我们输出0 0 0 0 0 0 0
二、解题思路
1.首先我们需要定义一个s用来读取每一行的数据
每行的数据应该不超过
(3个数字*4组+4个点)*2 + 1个“~”符号 = 33个字符
2. 我们定义a,b,c,d,e用来存放这五类地址的个数,然后我们定义一个error来存放错误IP地址或错误掩码的个数,然后我们定义一个private存放私有IP的个数
3.我们逐行读取数据,并用strtok分割字符串,“~”左边的是IP,“~”右边的是子网掩码
4.我们将~左边的IP储存为char *ip,将~右边的子网掩码储存为char *subnetmask
5.首先我们对子网掩码进行判断
使用sscanf将子网掩码分成四个部分,sscan(subnetmask,“%d.%d.%d.%d", &s1, &s2, &s3, &s4)读取到四个整数变量中s1,s2,s3,s4
sscanf它的作用类似于scanf
函数,但是sscanf
是从给定的字符串str
中读取数据,而scanf
是从标准输入(通常是键盘)读取数据。
如果s1、s2、s3、s4全都是0或者全都是255那么证明这个子网掩码是错误的,我们不需要再检查ip地址了直接error++
如果s1、s2、s3、s4大于等于0小于等于255,那么我们开始检查他的前面是否全都是1,后面是否全都是0
(如果s1-4中任何一个部分小于0或者大于255那么也是错误掩码error++)
6.如果我们判断好子网掩码是正确的了,那么我们判断IP地址(否则直接error++不用判断IP)
同样用sscan,将ip地址分成四个部分,sscan(s,“%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4)读取到四个整数变量中ip1,ip2,ip3,ip4
首先我们判断ip1是否是0或者127,如果ip1等于0或者127那么我们直接continue,进入下一次循环(读取下一行数据)
然后我们判断ip1、ip2、ip3、ip4是否全都是大于0小于256,如果是的话我们接着判断(如果不是的话我们error++)
先判断ip地址属于五类ip中的哪一类,判断ip1是属于1-126,128-191,192-223,224-239,240-255哪一个部分,然后分别对应部分的字母++
比如ip1>=1 && ip1<= 126的情况下我们a++
然后我们在a类的情况中还需要判断ip1是否等于10,如果是我们private++
在b类的情况中我们判断ip1是否等于172,如果是我们再判断ip2是否大于等于16小于等于31如果是,我们private++
在c类的情况中我们判断ip1是否是192,如果是我们再判断ip2是否是168,如果是我们private++
7.然后打印我们的a,b,c,d,e,error,private.(以空格隔开)
三、具体步骤
使用的语言是C
1.我们#include <stdio.h>引入输入输出库可以调用scanf、sscanf和printf函数
2.我们#include <string.h>库可以使用strtok函数,分割我们的字符串
3.我们进入主程序int main()
4.我们char s[33];
5.我们将计数器初始化
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int error = 0;
int private = 0;
6.逐行扫描进来输入直到没有数据
while(scanf("%32s", s) != EOF)
7.读入ip和subnetmask
char *ip = strtok(s, "~");
char *subnetmask = strtok(NULL, "~");
然后我们对子网掩码进行判断,先将其四个部分分别取出
unsigned int s1, s2, s3, s4;
sscan(subnetmask,“%d.%d.%d.%d", &s1, &s2, &s3, &s4);
我们定义一个notValid = 0;用来记录如果子网掩码不合法的话就跳过ip地址检查
如果是全0或者全1的情况我们记录非法
if((s1 == 0 && s2 == 0 && s3 == 0 && s4 == 0) || (s1 == 255 && s2 == 255 && s3 == 255 && s4 == 255))
error++;
notValid = 1;
检查合法性
else if(s1 >= 0 && s1 <= 255 && s2 >= 0 && s2 <= 255 && s3 >= 0 && s3 <= 255 && s4 >=0 && s4 <= 255)
如果合法,从第一位二进制开始检查是否是1,直到检查到0,如果之后全是0那么证明合法,如果之后又碰到了1那么这个子网掩码错误
我们先将这四个部分都放到一个整数mask中
unsigned int mask = (s1 << 24) | (s2 << 16) | (s3 << 8) | s4;
然后对mask进行检查,如果
位了方便我们检查我们定义一个int find0 = 0;表示我们是否在子网掩码中从做往右检查的过程中,找到了0
for(int front1 = 31; front1 >= 0; front1--)
if(!(mask & (1 << front1)))
如果我们发现了0,那么我们find0 = 1;
if(find0 == 1 && (mask & (1 << front1)))
如果我们发现了0之后,又发现了1那么我们这个子网掩码不合法
我们error++,并且break;跳出for循环
我们用同样的方法将ip地址的四个部分取出来
并进行ip地址分类
#include <stdio.h>
#include <string.h>int main() {char s[33];int a = 0;int b = 0;int c = 0;int d = 0;int e = 0;int error = 0;int private = 0;while (scanf("%s", s) != EOF) {//printf("our input is: %s\n", s);char* ip = strtok(s, "~");char* subnetmask = strtok(NULL, "~");//printf("ip : %s\nsubnetmask : %s\n", ip, subnetmask);int s1, s2, s3, s4;if ((sscanf(subnetmask, "%d.%d.%d.%d", &s1, &s2, &s3, &s4)) != 4) {error++;continue;}//printf("test s1: %d\n", s1);//现在我们开始对ip进行分类识别int ip1, ip2, ip3, ip4;if ((sscanf(ip, "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4)) != 4) {//读取有问题//printf("error reason4: reading problem, ip is not correct.\n");//printf("%s\n", ip);error++;continue;}//printf("after valid subnetmask the ip1 is%d\n", ip1);if (ip1 == 0 || ip1 == 127) continue;int notValid = 0;if ((s1 == 0 && s2 == 0 && s3 == 0 && s4 == 0) || (s1 == 255 && s2 == 255 &&s3 == 255 && s4 == 255)) {//printf("error reason1: subnetmask is all zero or one.\n");//printf("subnetmask is %d.%d.%d.%d\n", s1, s2, s3, s4);error++;notValid = 1;} else if (s1 >= 0 && s1 <= 255 && s2 >= 0 && s2 <= 255 && s3 >= 0 &&s3 <= 255 && s4 >= 0 && s4 <= 255) {unsigned int mask = (s1 << 24) | (s2 << 16) | (s3 << 8) | s4;//printf("mask : %u\n",mask);int find0 = 0;for (int front1 = 31; front1 >= 0; front1--) {if (!(mask & (1 << front1))) { //如果碰到了0,我们记录一下find0 = 1;}if ((mask & (1 << front1)) &&(find0 == 1)) { //如果已经碰到过0之后又碰到1那证明这个子网掩码错误notValid = 1;//printf("error reason2:subnet mask is not consecutive one and zero\n");//printf("%u\n", mask);error++;//printf("the subnet mask in binary is:\n");// for (int i = 31; i >= 0; i--) {// unsigned int bit = (mask >> i) & 1;// printf("%u", bit);// }//printf("\n");//printf("this subnetmask is not valid!\n");break;}}} else {//printf("error reason3: subnet mask not in ordinary range\n");//printf("%d.%d.%d.%d\n", s1, s2, s3, s4);error++;}//这个时候我们可以通过notValid来判断子网掩码是否是错误的,只有子网掩码正确的情况下我们才判断ipif (notValid) continue;if (ip1 > 0 && ip1 <= 255 && ip2 >= 0 && ip2 <= 255 && ip3 >= 0 && ip3 <= 255 &&ip4 >= 0 && ip4 <= 255) { // 如果我们的ip地址合法if (ip1 >= 1 && ip1 <= 126) {a++;//printf("a++ the ip1 is %d, ip2 is %d\n", ip1, ip2);if (ip1 == 10) {private++;}} else if (ip1 >= 128 && ip1 <= 191) {b++;if (ip1 == 172) {if (ip2 >= 16 && ip2 <= 31) {private++;}}} else if (ip1 >= 192 && ip1 <= 223) {c++;if ((ip1 == 192) && (ip2 == 168)) {private++;}} else if (ip1 >= 224 && ip1 <= 239) {d++;} else if (ip1 >= 240 && ip1 <= 255) {e++;}} else {//printf("error reason5: ip is not in ordinary range.\n");//printf("%s\n", ip);error++;}//printf("\n");}printf("%d %d %d %d %d %d %d", a, b, c, d, e, error, private);
}
又写了一个放在function里的
#include <stdio.h>
#include <string.h>
#define VALIDIP(a, b, c, d) (a >= 0 && a <= 255 && b >= 0 && b <= 255 && c >= 0 && c <= 255 && d >= 0 && d <= 255 )int isMaskValid(char* subnetmask) {int s1, s2, s3, s4;unsigned int mask;unsigned int max = -1;if ((sscanf(subnetmask, "%d.%d.%d.%d", &s1, &s2, &s3, &s4)) != 4) {return 0;} else if (VALIDIP(s1, s2, s3, s4)) {mask = (s1 << 24) | (s2 << 16) | (s3 << 8) | s4;if (mask == 0 || mask == max) return 0;else {while (!(mask & 1)) {mask >>= 1;max >>= 1;}}} else {return 0;}return mask == max;
}void classifyIP(char* s, int* a, int* b, int* c, int* d, int* e, int* error,int* private) {char *ip = strtok(s, "~");char *subnetmask = strtok(NULL, "~");int i[4];if ((sscanf(ip, "%d.%d.%d.%d", &i[0], &i[1], &i[2], &i[3])) == 4) {if (VALIDIP(i[0], i[1], i[2], i[3])){if(i[0] == 0 || i[0] == 127) return;else if (isMaskValid(subnetmask)){if(i[0] < 127) {(*a)++;if(i[0] == 10) (*private)++;} else if(i[0] < 192){(*b)++;if(i[0] == 172 && i[1] == 31) (*private)++;} else if(i[0] < 224){(*c)++;if(i[0] == 192 && i[1] == 168) (*private)++;} else if(i[0] < 240) (*d)++;else (*e)++;} else {(*error)++;}} else {(*error)++;}} else {(*error)++;}
}int main() {char s[33];int a = 0, b = 0, c = 0, d = 0, e = 0, error = 0, private = 0;while(scanf("%s", s) != EOF){classifyIP(s, &a, &b, &c, &d, &e, &error, &private);}printf("%d %d %d %d %d %d %d",a, b, c, d, e, error, private);
}
2024/10/29-21:34-2024/10/30-15:08
相关文章:
华为机试HJ18 识别有效的IP地址和掩码并进行分类统计
首先看一下题 描述 请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。 所有的IP地址划分为 A,B,C,D,E五类 A类地址从1.0.0.0到126.255.255.255; B类地址从128.0.0.0到191.255.255.255; C类地址从192.0.…...

计算机网络——TCP拥塞控制原理
吞吐量 端口有16位...

ubuntu-开机黑屏问题快速解决方法
开机黑屏一般是由于显卡驱动出现问题导致。 快速解决方法: 通过ubuntu高级选项->recovery模式->resume->按esc即可进入recovery模式,进去后重装显卡驱动,重启即可解决。附加问题:ubuntu的默认显示管理器是gdm3,如果重…...

DNS服务器
正反解析 [rootlocalhost ~]# systemctl stop firewalld #关防火墙 [rootlocalhost ~]# setenforce 0 #关闭selinux [rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# yum …...

【C++笔记】string类使用详解
前言 各位读者朋友们大家好!上期我们讲完了C的模板初阶,这一期我们开启STL的学习。STL是C的数据结构和算法库,是我们学习C的很重要的一部分内容,在以后的工作中也很重要。现在我们开始讲解。 目录 前言一. 为什么学习string类1.…...

数字隔离器与光隔离器有何不同?---腾恩科技
在电子隔离中,两种常用的解决方案是数字隔离器和光学隔离器。两者都旨在电气隔离电路的各个部分,以保护敏感元件免受高压干扰,但它们通过不同的技术实现这一目标。本文探讨了这些隔离器之间的差异,重点介绍了它们的工作原理、优势…...

方差与协方差
方差是一种特殊的协方差。...

【含文档】基于Springboot+Vue的工商局商家管理系统 (含源码数据库+LW)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...
【股票市场情绪量化模型】
股票市场情绪量化模型:理论与实践 目录 什么是股票市场情绪情绪量化模型的基本概念情绪数据的来源与获取情绪量化模型的构建 4.1 情绪指标的选择4.2 模型设计与算法 情绪与市场表现的关系情绪量化模型的应用案例模型的局限性与挑战总结 1. 什么是股票市场情绪 股…...
Oracle视频基础1.3.8与1.4.1练习
1.3.8与1.4.1 -看数据文件的目录, dump 的目录,oracle的软件目录 -(secureCRT,telnet连接linux。)看当前用户,当前所属组,通过操作系统认证以sysdba登陆,启动数据库然后关闭 -看口令文件 看数据文件的目录,…...
基于前馈神经网络模型和卷积神经网络的MINIST数据集训练
目录 前馈神经网络FNN模型 卷积神经网络CNN模型 前馈神经网络FNN模型 author: lxy function: model--mnist date : 2024/10/25 email : 13102790991163.com # 导入必要的库 import torch import torch.nn as nn import torchvision.datasets as dsets import torchvision.t…...
Vue3中Element Plus==el-eialog弹框中的input无法获取表单焦点
有弹框情况下 <template> <input ref"input" /> </template> <script setup> import { ref, onMounted } from vue // 声明一个 ref 来存放该元素的引用 // 必须和模板里的 ref 同名 const input ref(null) onMounted(() > { ne…...
16.网工入门篇--------介绍下网络服务及应用
一、网络服务的概念 网络服务是指通过网络提供的软件功能或设施,它允许不同的设备和用户在网络环境中进行信息交换、资源共享和协作。这些服务基于各种网络协议,以实现高效、可靠的通信。 二、常见网络服务类型 (一)文件传输服务 …...
区分 electron 全屏和最大化
一. 全屏 在 Electron 中,当窗口处于全屏状态时,通常不能直接使用 JavaScript 来改变窗口大小。这是出于安全和用户体验的考虑,以防止意外的窗口大小变化影响全屏体验。 1. 退出全屏后再调整大小 检测全屏状态,退出全屏并调整大…...
封装一个请求的hook(react函数组件)
对于后台系统,上面筛选,下面表格分页的页面,这个hook非常实用 omitBy方法:过滤不为undefined的对象属性 export const omitBy <T extends IObject, K extends keyof T>(object:T, predicate:(value:T[K]) > boolean):I…...

c语言内存块讲解
文章目录 前言一、栈区1、栈区的特点:1.1 自动管理1.2 后进先出1.3 有限大小1.4 高速访问1.5 栈区存储方向 2、栈区使用注意事项 二、堆区1、堆区的定义2、堆区的特点3、堆区的内存分配与释放4、注意事项: 三、全局/静态存储区1、全局存储区1.1 全局变量…...
2024年10月23日Github流行趋势
项目名称:hiteshchoudhary / apihub 项目维护者:wajeshubham, atulbhatt-system32, jwala-anirudh, arnb-smnta, shrey-dadhaniya 项目介绍:您自己的API Hub,用于学习和掌握API交互。非常适合前端、移动开发人员和后端开发人员。 …...
YOLOv6-4.0部分代码阅读笔记-dbb_transforms.py
dbb_transforms.py yolov6\layers\dbb_transforms.py 目录 dbb_transforms.py 1.所需的库和模块 2.def transI_fusebn(kernel, bn): 3.def transII_addbranch(kernels, biases): 4.def transIII_1x1_kxk(k1, b1, k2, b2, groups): 5.def transIV_depthconcat(kernel…...

C++ 基础语法 一
C 基础语法 一 文章目录 C 基础语法 一const 限定符常量指针类型别名autodecltypeQStringvector迭代器指针和数组显示转换static_castconst_cast 函数尽量使用常量引用数组形参不要返回局部对象的引用和指针返回数组指针 C四种转换内联函数constexpr函数函数指针 const 限定符 …...
B2020 分糖果
题目描述 某个幼儿园里,有 55 位小朋友编号依次为 1,2,3,4,51,2,3,4,5 他们按照自己的编号顺序围坐在一张圆桌旁。他们身上有若干糖果,现在他们玩一个分糖果游戏。从 11 号小朋友开始,将自己的糖果均分成 33 份(如果有多余的糖果…...
C++ if语句完全指南:从基础到工程实践
一、选择结构在程序设计中的核心地位 程序流程控制如同城市交通网络,if语句则是这个网络中的决策枢纽。根据ISO C标准,选择结构占典型项目代码量的32%-47%,其正确使用直接影响程序的: 逻辑正确性 执行效率 可维护性 安全边界 …...
解决神经网络输出尺寸过小的实战方案
训练CIFAR10分类模型时出现报错:RuntimeError: Given input size: (256x1x1). Calculated output size: (256x0x0). Output size is too small。该问题由网络结构设计缺陷导致图像尺寸过度缩小引发。 核心原因分析 网络结构缺陷 原始模型采用六层卷积层,…...

麒麟v10系统的docker重大问题解决-不支持容器名称解析
今天给客户在麒麟v10Kylin-Server-V10-SP1下安装nextcloudonlyoffice的时候出现无法连接onlyoffice的问题,经过分析找到了是docker版本过低的原因,现在把解决思路和步骤分享给大家。 一、问题 用一键安装工具,给客户装好了系统,Nextcloud可以正常访问 但是访问nextcloud中的o…...
鸿蒙应用开发之uni-app x实践
鸿蒙应用开发之uni-app x实践 前言 最近在开发鸿蒙应用时,发现uni-app x从4.61版本开始支持纯血鸿蒙(Harmony next),可以直接编译成ArkTS原生应用。这里记录一下开发过程中的一些经验和踩过的坑。 一、环境搭建 1.1 开发工具 …...

第46节:多模态分类(图像+文本)
一、多模态分类概述 多模态分类是指利用来自不同模态(如图像、文本、音频等)的数据进行联合分析和分类的任务。 在当今大数据时代,信息往往以多种形式存在,例如社交媒体上的图片配文字、视频附带字幕、医疗检查中的影像与报告等。单一模态的数据往往只能提供有限的信息,…...

ServBay 1.13.0 更新,新增第三方反向代理/内网穿透
ServBay 作为一款简化本地开发环境搭建与管理的强大工具,致力于打造一个开箱即用、稳定可靠的本地开发平台,让用户专注于代码编写,提升开发效率。 ServBay 1.13.0 正式发布!本次更新聚焦于提升本地开发项目的外部可访问性、增强国…...

PyCharm项目和文件运行时使用conda环境的教程
打开【文件】—【新建项目】 按照下图配置环境 可以看到我这个项目里,报错“No module named modelscope” 点击终端,输入命令 #显示所有的conda环境 conda env list #选择需要激活的conda环境 conda activate XXX在终端中,执行pip install …...
React---扩展补充
一些额外的扩展 4.3 高阶组件 高阶组件是参数为组件,返回值为新组件的函数; 高阶组件 本身不是一个组件,而是一个函数;其次,这个函数的参数是一个组件,返回值也是一个组件; import React fr…...

如何有效删除 iPhone 上的所有内容?
“在出售我的 iPhone 之前,我该如何清除它?我担心如果我卖掉它,有人可能会从我的 iPhone 中恢复我的信息。” 升级到新 iPhone 后,你如何处理旧 iPhone?你打算出售、以旧换新还是捐赠?无论你选择哪一款&am…...

LabVIEW与Modbus/TCP温湿度监控系统
基于LabVIEW 开发平台与 Modbus/TCP 通信协议,设计一套适用于实验室环境的温湿度数据采集监控系统。通过上位机与高精度温湿度采集设备的远程通信,实现多设备温湿度数据的实时采集、存储、分析及报警功能,解决传统人工采集效率低、环境适应性…...