HJ 18 識別有效的IP位址和掩碼並進行分類統計

2021-10-22 12:48:02 字數 1784 閱讀 4218

先進行出錯處理,然後分類統計。

請解析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位址和掩碼,用~隔開。

統計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
#include#includeusing namespace std;

enum ;

int main()

if(*begin == '.' || *p == '\0')

*p = '\0';

char *ptr;

addr[i] = strtod(begin, &ptr);

begin = ++p;

}if(err)

p = begin;

int mask[4];

for(int i = 0; i < 4; i++)

if(*begin == '.')

*p = '\0';

char *ptr;

mask[i] = strtod(begin, &ptr);

begin = ++p;

}if(err)

int mask = (mask[0]<<24)+(mask[1]<<16)+(mask[2]<<8)+(mask[3]);

if(mask != 0 && mask != 0xffffffff)

}mask <<= 1;

}} else

if(err) else

} else if(addr[0] >= 128 && addr[0] <= 191)

} else if(addr[0] >= 192 && addr[0] <= 223)

} else if(addr[0] >= 224 && addr[0] <= 239) else if(addr[0] >= 240 && addr[0] <= 255) }}

}for(int i = 0; i < 7; i++) cout << (i == 0 ? "" : " ") << count[i];

}

18 識別有效的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....

識別有效的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 2...

識別有效的IP位址和掩碼並進行分類統計

include include include include using namespace std static int result 7 儲存最後結果的陣列 string chang string str 轉換為二進位制 itoa num,tmp1,2 把num轉換為二進位制,並以字串形式儲存...