先進行出錯處理,然後分類統計。
請解析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轉換為二進位制,並以字串形式儲存...