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

2021-07-22 13:17:24 字數 1316 閱讀 7279

解題思路:

這題重頭任務是判斷ip位址和掩碼輸入是否合法,需要檢查:

(1)有無其他字元亂入

(2)"."和"~"的數量和相對位置是否正確

(3)數字的個數及相對位置是否正確

(4)每個數字的範圍是不是在[0,255]

(5)掩碼是否合法(前面是連續的1,然後全是0)

(6)0.0.0.0和255.255.255.255也是非法掩碼

ip和掩碼下輸入合法的情況下,分類就很簡單了。

注意問題:

多種不合法輸入出現,只算一次不合法

移位操作的結果(整型254<<1是508而不是252,因為整型為32位,1的個數沒有減少;char型254<<1是-4而不是252,因為代表有符號數)

難點:邊判斷格式合法否邊提取子段數字

#include #include using namespace std;

int ip[4];

int mask[4];

bool valid(string s)

else

num=stod(subs);

if(num<0 || num>255) //如果子段數字小於0或大於255,位址或掩碼錯誤

return false;

else

} if(i==7)

//判斷掩碼是否合法

i=0;

while(mask[i]==255)

i++;

if(i==4)

return false; 是非法掩碼

int rule=254; //rule是二進位制前面全為1,後面全為0的8bits數

int d=1; //每次為2的次方,使rule實現左移效果

int j;

for(j=0;j<8;j++)

if(j==8)

return false; //掩碼子段不是前面全1,後面全0,掩碼不合法

while(i!=3)

if(mask[0]==0 && i==3)

return false; 是非法掩碼

return true;

}int main()

if(ip[0]>=1 && ip[0]<=126)

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

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

else if(ip[0]>=224 && ip[0]<=239)

dcount++;

else if(ip[0]>=240 && ip[0]<=255)

ecount++;

} cout<

識別有效的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轉換為二進位制,並以字串形式儲存...

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