#include <iostream>#include <sstream>#include <string>#include <vector>using namespace std;bool judge_ip(string ip) {    int cnt = 0;    // 以'.'分割IP,记录有几段    istringstream iss(ip);    string seg;    while(getline(iss, seg, '.')) {        if(++cnt > 4 || seg.empty() || stoi(seg) > 255)            return false;   // 非法IP    }    return cnt == 4;    // 少于4段也是非法IP}bool is_private(string ip) {    istringstream iss(ip);    string seg;    vector<int> v;    while(getline(iss, seg, '.')) v.push_back(stoi(seg));    if(v[0] == 10) return true;    if(v[0] == 172 && (v[1]>=16 && v[1]<=32)) return true;    if(v[0] == 192 && v[1] == 168) return true;    return false;}bool is_mask(string ip) {    istringstream iss(ip);    unsigned int b = 0;    string seg;    while(getline(iss, seg, '.'))        b = (b<<8) + stoi(seg);    if(!b) return false;    // 全0    b = ~b;    if(b == 0) return false;    // 全1    if(((b+1) & b) == 0) return true;   // 是否为连续的'1'    return false;}int main() {    int a = 0, b = 0, c = 0, d = 0, e = 0, err = 0, p = 0;    string input;    while(cin >> input) {        istringstream is(input);        string str;        vector<string> vec;        while(getline(is, str, '~')) vec.push_back(str);    // 用'~'分割IP和Mask        if(judge_ip(vec[1]) && judge_ip(vec[0])) {            int first = stoi(vec[0].substr(0, vec[0].find_first_of('.')));            if(first == 0 || first == 127) continue; // 注意!!!!            if(is_mask(vec[1])) {                if(is_private(vec[0])) ++p;     // 私网IP                // 判断几类地址                if(first > 0 && first < 127) ++a;                else if(first > 127 && first < 192) ++b;                else if(first > 191 && first < 224) ++c;                else if(first > 223 && first < 240) ++d;                else if(first > 239 && first < 256) ++e;            }            else {                ++err;            }        }        else {            ++err;        }    }    cout << a << ' ' << b << ' ' << c << ' ' << d << ' ' << e << ' ' << err << ' ' << p;    return 0;}// 64 位输出请用 printf("%lld")注意规则:类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时可以忽略该规则比正确的掩码优先级更高,即使掩码不对,但只要IP满足【0.*.*.*】或【127.*.*.*】格式,都应该忽略不计。例如“127.201.56.50~255.255.111.255”不能被记为格式错误。
点赞 0
评论 0
全部评论

相关推荐

积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
07-19 13:28
长沙学院 Java
鸿哥鸿哥:学院(一本),感觉在脱ku子放屁,学院结尾的除了那几家出名的,一律按二本处理
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务