題目描述:
子網掩碼是用來判斷任意兩臺計算機的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
新聞熱點
疑難解答
圖片精選