一丁_
2019-05-25 21:20
采纳率: 100%
浏览 1.7k

给定两个 IP 地址和子网掩码判断 IP 是否属于同一网段

1.问题:程序可以运行,但运行结果测试用例通过率只有 75% ,问哪里出现了漏洞?

2.题目描述:给定两个 IP 地址和子网掩码判断 IP 是否属于同一网段

输入描述:IP地址 1,IP地址 2,子网掩码,三个字段之间用空格分隔。能够确保输入的 IP 和子网掩码是合法的。

输出描述:先输出 0 或者 1,0 表示不属于同一网段,1 表示属于同一网段。紧接着输出空格,然后在输出第一个 IP 地址与子网掩码二进制按位与之后的 IP。

参考输入1:192.168.1.1 192.168.1.2 255.255.255.0

参考输出1:1 192.168.1.0

参考输入 2:192.168.1.5 192.168.2.1 255.255.255.0

参考输出 2:0 192.168.1.0

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    int da1 = 0, db1 = 0, dc1 = 0, dd1 = 0;  //地址一字段
    int da2 = 0, db2 = 0, dc2 = 0, dd2 = 0;  //地址二字段
    int ma = 0, mb = 0, mc = 0, md = 0;      //子网字段
    char ch;
    string str;
    while(cin >> str)
    {
        stringstream ss;
        ss << str;
        ss >> da1 >> ch >> db1 >> ch >> dc1 >> ch >> dd1; //地址 1 输入
        ss.clear();
        cin >> str;
        ss << str;
        ss >> da2 >> ch >> db2 >> ch >> dc2 >> ch >> dd2; //地址 2 输入
        ss.clear();
        cin >> str;
        ss << str;
        ss >> ma >>ch >> mb >> ch >> mc >> md;            //地址 3 输入
        ss.clear();

        if((da1 & ma) == (da2 & ma) && (db1 & mb) == (db2 & mb) &&
            (dc1 & mc) == (dc2 & mc) && (dd1 & md) == (dd2 & md)) //判断是否属于同一网络
        {
            cout << 1 << ' ' << int(da1 & ma) << '.' << int(db1 & mb) << '.' << int(dc1 & mc) << '.' << int(dd1 &md);
        }
        else
        {
            cout << 0 << ' ' << int(da1 & ma) << '.' << int(db1 & mb) << '.' << int(dc1 & mc) << '.' << int(dd1 &md);
        }
        cout << endl;
        da1 = 0, db1 = 0, dc1 = 0, dd1 = 0;
        da2 = 0, db2 = 0, dc2 = 0, dd2 =  0;
        ma = 0, mb = 0, mc = 0, md = 0;
    }
    return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

相关推荐 更多相似问题