题目描述:
子网掩码是用来判断任意两台计算机的ip地址是否属于同一子网络的根据。 子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否在同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
输入描述:输入子网掩码、两个ip地址
输出描述:判断结果;0:IP1与IP2属于同一子网络; 1:IP地址或子网掩码格式非法; 2:IP1与IP2不属于同一子网络
输入例子:
255.255.255.0
192.168.224.256
192.168.10.4
输出例子:
1
算法实现:
#include<iostream>#include<vector>#include<string>using namespace std;/************************************************ * Author: 赵志乾 * Date: 2017-2-17 * Declaration: All Rigths Reserved !!! ***********************************************/int StrtoInt(string&str,int i,int j);void IPtoData(string&IP,vector<int>&data);bool CheckIPTrue(vector<int>&data);int main(){ string mask,IPaddrA,IPaddrB; cin>>mask>>IPaddrA>>IPaddrB; vector<int>mdata(4,0); vector<int>Adata(4,0); vector<int>Bdata(4,0); IPtoData(mask,mdata); IPtoData(IPaddrA,Adata); IPtoData(IPaddrB,Bdata); if(CheckIPTrue(mdata)&&CheckIPTrue(Adata)&&CheckIPTrue(Bdata)) { for(int i=0;i<mdata.size();i++) { if((mdata[i]&Adata[i])!=(mdata[i]&Bdata[i])) { cout<<2<<endl; return 0; } } cout<<0<<endl; } else { cout<<1<<endl; } return 0;}int StrtoInt(string&str,int i,int j){ int ret=0; while(i<j) { ret=ret*10+str[i]-'0'; i++; } return ret;}void IPtoData(string&IP,vector<int>&data){ int index=0; int i=0,j=0; for( ;j<IP.length()+1;j++) { if((j==IP.length())||(IP[j]=='.')) { data[index]=StrtoInt(IP,i,j); index++; i=j+1; } }}bool CheckIPTrue(vector<int>&data){ for(int i=0;i<data.size();i++) { if(data[i]>255) return false; } return true;}1
新闻热点
疑难解答
图片精选