題目描述
請解析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就是乙個非法的掩碼)
本題暫時預設以0開頭的ip位址是合法的,比如0.1.1.2,是合法位址
輸入描述:
多行字串。每行乙個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
思路:1.判斷合法ip:長度為4,每一位0~255
2.判斷合法子網掩碼:長度為4,前面為連續的1,後面全是0
3.判斷a\b\c\d\e類和私有類
import sys
def checkip(ip):
if len(ip) != 4 and '' in ip:
return false
else:
for i in range(4): # 判斷每乙個.分割的是否為0~255
if int(ip[i]) < 0 or int(ip[i]) > 255:
return false
else: # 都滿足返回true
return true
list = ['254', '252', '248', '240', '224', '192', '128', '0'] # 8位,末尾逐步為0的數
def checkmask(ms):
if len(ms) != 4: # 先判斷長度
return false
if ms[0] == '255':
if ms[1] == '255':
if ms[2] == '255':
if ms[3] in list: # 第四個開始出現0
return true
else:
return false
elif ms[2] in list and ms[3] == '0': # 第三個開始出現0,第四個必須為0
return true
else:
return false
elif ms[1] in list and ms[2] == '0' and ms[3] == '0':
return true
else:
return false
elif ms[0] in list and ms[1] == '0' and ms[2] == '0' and ms[3] == '0':
return true
else:
return false
a=0b = 0
c = 0
d = 0
e = 0
err = 0
private = 0
while true:
string=sys.stdin.readline().strip()
if string=='':
break
ipstr,msstr=string.split('~')
iplist = ipstr.split('.')
mslist = msstr.split('.')
if checkip(iplist) and checkmask(mslist):
if 1<=int(iplist[0])<=126:
a+=1
if 128<=int(iplist[0])<=191:
b+=1
if 192<=int(iplist[0])<=223:
c+=1
if 224 <= int(iplist[0]) <= 239:
d += 1
if 240 <= int(iplist[0]) <= 255:
e += 1
if int(iplist[0])==10 or (int(iplist[0])==172 and 16<=int(iplist[1])<=31) or (int(iplist[0])==192 and int(iplist[1])==168):
private+=1
else:
err+=1
print(a,b,c,d,e,err,private)
HJ 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 ...
識別有效的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轉換為二進位制,並以字串形式儲存...