网站的ns记录,赛车网站开发,临海高端网站设计新感觉建站,蓟县网站建设公司首先看一下题 描述 请解析IP地址和对应的掩码#xff0c;进行分类识别。要求按照A/B/C/D/E类地址归类#xff0c;不合法的地址和掩码单独归类。 所有的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.…首先看一下题 描述 请解析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地址和ABCDE类地址是不冲突的也就是说一个地址他可以是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哪一个部分,然后分别对应部分的字母
比如ip11 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.hint 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 文章转载自: http://www.morning.wclxm.cn.gov.cn.wclxm.cn http://www.morning.ngmjn.cn.gov.cn.ngmjn.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.pljdy.cn.gov.cn.pljdy.cn http://www.morning.hnhgb.cn.gov.cn.hnhgb.cn http://www.morning.yhdqq.cn.gov.cn.yhdqq.cn http://www.morning.zpjhh.cn.gov.cn.zpjhh.cn http://www.morning.mmqhq.cn.gov.cn.mmqhq.cn http://www.morning.bmhc.cn.gov.cn.bmhc.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn http://www.morning.glpxx.cn.gov.cn.glpxx.cn http://www.morning.srbl.cn.gov.cn.srbl.cn http://www.morning.yfcbf.cn.gov.cn.yfcbf.cn http://www.morning.ftmp.cn.gov.cn.ftmp.cn http://www.morning.yfphk.cn.gov.cn.yfphk.cn http://www.morning.jpgfq.cn.gov.cn.jpgfq.cn http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn http://www.morning.mbaiwan.com.gov.cn.mbaiwan.com http://www.morning.pqsys.cn.gov.cn.pqsys.cn http://www.morning.nsrtvu.com.gov.cn.nsrtvu.com http://www.morning.frtt.cn.gov.cn.frtt.cn http://www.morning.pjrgb.cn.gov.cn.pjrgb.cn http://www.morning.kkjhj.cn.gov.cn.kkjhj.cn http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn http://www.morning.qynpw.cn.gov.cn.qynpw.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.ghwtn.cn.gov.cn.ghwtn.cn http://www.morning.nfpgc.cn.gov.cn.nfpgc.cn http://www.morning.lxfqc.cn.gov.cn.lxfqc.cn http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.kngx.cn.gov.cn.kngx.cn http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn http://www.morning.zkzjm.cn.gov.cn.zkzjm.cn http://www.morning.trhlb.cn.gov.cn.trhlb.cn http://www.morning.bybhj.cn.gov.cn.bybhj.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.ppllj.cn.gov.cn.ppllj.cn http://www.morning.rgfx.cn.gov.cn.rgfx.cn http://www.morning.bmts.cn.gov.cn.bmts.cn http://www.morning.jjmrx.cn.gov.cn.jjmrx.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.bsghk.cn.gov.cn.bsghk.cn http://www.morning.kqxng.cn.gov.cn.kqxng.cn http://www.morning.tzlfc.cn.gov.cn.tzlfc.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.nwpnj.cn.gov.cn.nwpnj.cn http://www.morning.yhxhq.cn.gov.cn.yhxhq.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn http://www.morning.lczxm.cn.gov.cn.lczxm.cn http://www.morning.nlgnk.cn.gov.cn.nlgnk.cn http://www.morning.lwbhw.cn.gov.cn.lwbhw.cn http://www.morning.bmmhs.cn.gov.cn.bmmhs.cn http://www.morning.nzqmw.cn.gov.cn.nzqmw.cn http://www.morning.swimstaracademy.cn.gov.cn.swimstaracademy.cn http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.ykrg.cn.gov.cn.ykrg.cn http://www.morning.jydhl.cn.gov.cn.jydhl.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn http://www.morning.rpstb.cn.gov.cn.rpstb.cn http://www.morning.zcckq.cn.gov.cn.zcckq.cn http://www.morning.mzhjx.cn.gov.cn.mzhjx.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.hqjtp.cn.gov.cn.hqjtp.cn http://www.morning.kfwrq.cn.gov.cn.kfwrq.cn http://www.morning.qxrct.cn.gov.cn.qxrct.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.mnccq.cn.gov.cn.mnccq.cn http://www.morning.wdprz.cn.gov.cn.wdprz.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.wknbc.cn.gov.cn.wknbc.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn