博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
识别有效的IP地址和掩码并进行分类统计
阅读量:4316 次
发布时间:2019-06-06

本文共 3181 字,大约阅读时间需要 10 分钟。

该题我的想法是把每一个ip看出一个整数,将读取得到的数据一一与给定的ip范围比较即可。另外本题应该注意的地方是scanf读取俩字符串的方法。

代码如下:

1 #include
2 #include
3 #include
4 using namespace std; 5 6 unsigned long long range[8][2] = { 7 {
10000000000,10255255255}, 8 {
172016000000,17231255255}, 9 {
192168000000,192168255255}, 10 11 {
1000000000,126255255255}, 12 {
128000000000,191255255255}, 13 {
192000000000,223255255255}, 14 {
224000000000,239255255255}, 15 {
240000000000,255255255255}, 16 }; 17 18 int explain(char* ip){ 19 int expect = 1; 20 int cnt = 0; 21 for(int i = 0 ; i < strlen(ip) ; i ++){ 22 23 if(ip[i] >= '0' && ip[i] <= '9'){ 24 expect = 1; 25 } 26 else{ 27 if(expect == 0) return -1; 28 expect = 0;//下一个字符必须是数字 29 cnt ++; 30 } 31 } 32 if(cnt != 3) return -1;// 必须有三个.符号 33 return 1; 34 } 35 36 int main(){ 37 char ip[20] , code[20]; 38 int a = 0 , b = 0 , c = 0 , d = 0 , e = 0 ,eip = 0 , sip = 0; 39 int cnt = 0; 40 while(scanf("%[^~]~%s",ip,code) != EOF){ 41 int cds = explain(code); 42 int flag = 0; 43 if(cds > 0){ 44 int aa[4]; 45 sscanf(code , "%d.%d.%d.%d" , &aa[0],&aa[1],&aa[2],&aa[3]); 46 if(aa[0] > 255 || aa[1] > 255 || aa[2] > 255 || aa[3] > 255 || (aa[0] == 255 && aa[1] == 255 && aa[2] ==255 &&aa[3]==255 )){ 47 //qudiao 255.255.255.255 以及在某个位上大于255的不合法的mask 48 eip ++; 49 flag = 1; 50 } 51 int exp = 1; 52 for(int i = 0 ; !flag && i < 4 ; i ++){ 53 if(exp == 0 && aa[i] || aa[i] > 255){ 54 eip ++; 55 flag = 1; 56 break; 57 } 58 int a1 = aa[i]; 59 if(a1 < 255){ 60 if(a1 == 128 || a1 == 192 || a1 == 224 || a1 == 240 || a1 == 248 || a1 == 252 || a1 == 254){ 61 exp = 0; 62 }else if(a1 == 0 && i > 0){ 63 exp = 0;//去除0.0.0.0 64 } 65 else{ 66 eip ++; 67 flag = 1; 68 break; 69 } 70 } 71 } 72 }else{ 73 flag = 1; 74 eip ++; 75 }//end 76 if(flag == 0){ 77 int ips = explain(ip); 78 if(ips > 0){ 79 80 int a1 , b1 ,c1 ,d1; 81 sscanf(ip , "%d.%d.%d.%d" , &a1,&b1,&c1,&d1); 82 if(a1>255 || b1 > 255 || c1 > 255 || d1 > 255){ 83 eip++; 84 flag = 1; 85 } 86 if(flag == 0){ 87 long long ans = a1*1e9 + b1*1e6 + c1*1e3 + d1; 88 //cout<
<
= range[i][0]){ 92 // cout<
<

 

转载于:https://www.cnblogs.com/castlehappiness/p/5836303.html

你可能感兴趣的文章
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
jxl写入excel实现数据导出功能
查看>>
linux文件目录类命令|--cp指令
查看>>
.net MVC 404错误解决方法
查看>>
linux系统目录结构
查看>>
git
查看>>
btn按钮之间事件相互调用
查看>>
Entity Framework 4.3.1 级联删除
查看>>
codevs 1163:访问艺术馆
查看>>
冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱
查看>>
并查集
查看>>
sessionStorage
查看>>
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
人工智能暑期课程实践项目——智能家居控制(一)
查看>>
前端数据可视化插件(二)图谱
查看>>
kafka web端管理工具 kafka-manager【转发】
查看>>
获取控制台窗口句柄GetConsoleWindow
查看>>
Linux下Qt+CUDA调试并运行
查看>>
51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
查看>>