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

代码如下:

 #include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std; unsigned long long range[][] = {
{,},
{,},
{,}, {,},
{,},
{,},
{,},
{,},
}; int explain(char* ip){
int expect = ;
int cnt = ;
for(int i = ; i < strlen(ip) ; i ++){ if(ip[i] >= '' && ip[i] <= ''){
expect = ;
}
else{
if(expect == ) return -;
expect = ;//下一个字符必须是数字
cnt ++;
}
}
if(cnt != ) return -;// 必须有三个.符号
return ;
} int main(){
char ip[] , code[];
int a = , b = , c = , d = , e = ,eip = , sip = ;
int cnt = ;
while(scanf("%[^~]~%s",ip,code) != EOF){
int cds = explain(code);
int flag = ;
if(cds > ){
int aa[];
sscanf(code , "%d.%d.%d.%d" , &aa[],&aa[],&aa[],&aa[]);
if(aa[] > || aa[] > || aa[] > || aa[] > || (aa[] == && aa[] == && aa[] == &&aa[]== )){
//qudiao 255.255.255.255 以及在某个位上大于255的不合法的mask
eip ++;
flag = ;
}
int exp = ;
for(int i = ; !flag && i < ; i ++){
if(exp == && aa[i] || aa[i] > ){
eip ++;
flag = ;
break;
}
int a1 = aa[i];
if(a1 < ){
if(a1 == || a1 == || a1 == || a1 == || a1 == || a1 == || a1 == ){
exp = ;
}else if(a1 == && i > ){
exp = ;//去除0.0.0.0
}
else{
eip ++;
flag = ;
break;
}
}
}
}else{
flag = ;
eip ++;
}//end
if(flag == ){
int ips = explain(ip);
if(ips > ){ int a1 , b1 ,c1 ,d1;
sscanf(ip , "%d.%d.%d.%d" , &a1,&b1,&c1,&d1);
if(a1> || b1 > || c1 > || d1 > ){
eip++;
flag = ;
}
if(flag == ){
long long ans = a1*1e9 + b1*1e6 + c1*1e3 + d1;
//cout<<ans<<endl;
int i = ;
for( ; i < ; i ++){
if(ans <= range[i][] && ans >= range[i][]){
// cout<<i<<endl;
if(i == ) a ++;
if(i == ) b ++;
if(i == ) c ++;
if(i == ) d ++;
if(i == ) e ++;
if(i == || i == || i == ) sip ++;
//break;
}
}
}
}else{
eip ++;
}
}
memset(ip,'\0',sizeof ip);
memset(code,'\0',sizeof(code));
getchar();
}
printf("%d %d %d %d %d %d %d\n",a,b,c,d,e,eip,sip);
return ;
}

识别有效的IP地址和掩码并进行分类统计的更多相关文章

  1. 26:IPMaskCheck识别有效的ip地址和掩码并分类统计

    题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.2 ...

  2. 识别有效的IP地址和掩码并进行分类统

    #include<iostream> #include<stdio.h> #include<string.h> using namespace std; int c ...

  3. 算法 识别有效ip地址和掩码并做统计

    题目描述 请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. 所有的IP地址划分为 A,B,C,D,E五类 A类地址1.0.0.0~126.2 ...

  4. Python 输入IP地址及掩码告诉你该网段包含的全部地址(IPy模块练习)

    IPy模块原本使用时需要输入正确的网络位和掩码,我利用处理报错的机制实现了输入任意IP地址和掩码均可正确输出结果的小程序. #!/usr/bin/env python # -*- coding: ut ...

  5. 设置ip地址、掩码、网关、DNS

    @echo offcolor f8mode con cols=40 lines=8echo.echo.echo      设置IP为:echo.set /p ip=              192. ...

  6. 根据Ip地址与掩码 得出 子网地址与广播地址

    由于给予条件优先,没有直接给出子网地址与广播地址.但是又需要这两个参数,需要我们使用ip 地址与 子网掩码得出子网地址与广播地址.思路如下:       1. 子网地址, ip地址与 子网掩码分别换算 ...

  7. IP地址分类与识别错误

    //描述:  请解析IP地址和对应的掩码,进行分类识别.要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类. //所有的IP地址划分为 A,B,C,D,E五类 //A类地址1.0.0.0 ...

  8. MAC地址与IP地址的区别

    介绍一下MAC地址的知识,MAC地址和IP地址的区别以及MAC地址在实际应用中所涉及到的安全问题. 一.基础知识 如今的网络是分层来实现的,就像是搭积木一样,先设计某个特定功能的模块,然后把模块拼起来 ...

  9. IP地址的分类与寻址

    IP地址:有一种标识符,被TCP/IP协议簇的IP层用来标识 连接到因特网的设备.IP协议的第4版IPv4地址是32位地址,是连接地址,定义了每一个连接到因特网上的设备(可以认为是主机的别名),而不是 ...

随机推荐

  1. Upload files to aliyunOSS with bootstrap-fileinput

    本文主要涉及两个概念: 阿里云OSS:对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量.安全和高可靠的云存储服务. bootstrap-fileinput: ...

  2. SqlServer Where后面Case When语句的写法

    select * from tb where (case when col='***' then '***' else '***' end)='***'

  3. webpack 入门

    webpack webpack,是一款模块加载器兼打包工具.能将 JS.coffee.less.sass.图片等作为模块来使用. 经过一个多月的摸索,姑且算是入门了.因此重新写个小DEMO来加深自己对 ...

  4. delphi IOS 获取电池信息

    procedure TDeviceInfoForm.btnGetDeviceInfoClick(Sender: TObject); var Device : UIDevice; begin Devic ...

  5. 页面可见生Page Visibility

    Page Visibility 会在浏览器的 document 对象上添加两个属性 hidden 和 visibilityState .如果当前的标签被激活了,那么 document.hidden 的 ...

  6. git不是内部命令和可执行程序解决方法

    1.从Git官网下载windows版本的git:http://git-scm.com/downloads 2.一般使用默认设置即可:一路next,git安装完毕! 3.但是如果这时你打开windows ...

  7. SQL Server 常用命令使用方法

    (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * f ...

  8. Java编写最大公约数和最小公倍数

    package javaapplication24; class NegativeIntegerException extends Exception{ String message; public ...

  9. windows server 无人值守安装

    使用 answer file:AutoUnattend.xml 来无人值守安装,到了选系统这步 还是要手动选择一个系统,这是为什么?怎么设置可以默认进入GUI的系统进行安装啊?

  10. rpm封装包,只用于记录自己过程,不适合初学者看,请看参考链接

    参考http://www.worldhello.net/2011/04/02/2405.html http://www.ibm.com/developerworks/cn/linux/manageme ...