现在的位置: 首页 > 综合 > 正文

【4356】华为入职前联系

2013年03月03日 ⁄ 综合 ⁄ 共 1336字 ⁄ 字号 评论关闭

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

功能: 判断两台计算机IP地址是同一子网络。
原型:
    int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);

输入参数:
    char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”;
    char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”;
    char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”;

返回值:
    0:IP1与IP2不属于同一子网络;
    1:IP1与IP2属于同一子网络;
*/

int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask)
{
    /*在这里实现功能*/
	int a[4]={0};
	int b[4]={0};
	int c[4]={0};
	int i=0;
	int flag=1;
	int tmp=0;

	while(*pcIp1)
	{
			
				 while((*pcIp1!='.')&&(*pcIp1))
				 {
					 tmp =tmp*10+(int)(*pcIp1-'0');	
					 pcIp1++;
				 }
				 if(*pcIp1=='.')
				 {
					 pcIp1++;	
					 a[i++]=tmp;
					 tmp=0;
				 }
			}
	a[i]=tmp;
	tmp=0;		
	i=0;
	
			while(*pcIp2)
	{
			
				 while((*pcIp2!='.')&&(*pcIp2))
				 {
					 tmp =tmp*10+(int)(*pcIp2-'0');	
					 pcIp2++;
				 }
				 if(*pcIp2=='.')
				 {
					 pcIp2++;	
					 b[i++]=tmp;
					 tmp=0;
				 }
			}
	b[i]=tmp;
	tmp=0;	
	i=0;
			
			while(*pcSubNetworkMask)
	{
			
				 while((*pcSubNetworkMask!='.')&&(*pcSubNetworkMask))
				 {
					 tmp =tmp*10+(int)(*pcSubNetworkMask-'0');	
					 pcSubNetworkMask++;
				 }
				 if(*pcSubNetworkMask=='.')
				 {
					 pcSubNetworkMask++;	
					 c[i++]=tmp;
					 tmp=0;
				 }
			}
	c[i]=tmp;
			

		for(i=0;i<4;i++)
		{
			if((a[i]&c[i]) == (b[i]&c[i]))
				continue;
			else
			{
				flag=0;
				break;
			}
		}

		return flag;
}

本看来看了一个大神的代码,发现看不太明白。于是我就想将char数组里面的IP地址的点分十进制转换到int数组里,然后直接利用AND运算,得出结果。

但是,对于:pcIp1[12]={‘1’,‘9’,‘2’,'.','1','6','8','.''0','.','1'}这样的字符数组有点hold不住,循环不知道怎么嵌套。花了4个半小时,才把这道初级题做出来,代码写的重复度挺挺高的,仅以此哀悼耗掉的时间和错过的一场宣讲会吧。。。。。。

抱歉!评论已关闭.