2021-03-25 子网掩码

子网掩码

子网掩码计算方法

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。

输入格式:

第一行是本机IP地址

第二行是子网掩码

第三行整数N,表示后面有N个IP地址

第1个IP地址

......

第N个IP地址

N<1e5

输出格式:

计算并输出N个IP地址是否与本机在同一子网内。

对于在同一子网的输出"INNER"

对于在不同子网的输出“OUTER”

输入样例:

192.168.0.1
255.255.255.0
3
192.168.0.2
192.168.0.254
192.168.1.2

输出样例:

在这里给出相应的输出。例如:

INNER
INNER
OUTER

代码如下 :

#include<iostream>
#include<string>

using namespace std;
//字符串转int数组
void StringToInt(string s, int r[]) {
	int at = 0;
	
	for (int i = 0; i < 4; i++) {
		r[i] = 0;
	}
	
	for (int i = 0; s[i] != '\0'; i++) {
		if (s[i] == '.') {
			at++;
			continue;
		}
		else {
			int t = s[i] - '0';

			if (r[at] == 0) {
				r[at] = t;
			}
			else {
				r[at] = r[at] * 10 + t;
			}
		}
	}
}
//与运算
void AndOp(int l[], int v[]) {
	for (int i = 0; i < 4; i++) {
		l[i] = l[i] & v[i];
	}
}

int main() {

	int* local = new int[4];
	int* subnet = new int[4];
	int n;
	string ls, ss, result;
	int* ns = new int[4];
	cin >> ls;
	StringToInt(ls, local);
	cin >> ss;
	StringToInt(ss, subnet);
	cin >> n;
	string ips;
	AndOp(local, subnet);
	for (int i = 0; i < n; i++) {
		cin >> ips;
		StringToInt(ips, ns);
		AndOp(ns, subnet);

		result = "INNER";
		for (int j = 0; j < 4; j++) {
			if (ns[j] != local[j]) {
				result = "OUTER";
				break;
			}
		}
		cout << result;
		if (i < n - 1)	cout << endl;
	}

	delete[] local, subnet, ns;	//释放空间

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值