海康威视笔试题(如何判断两个IP地址在同一网段)

基本思路:
要判断两个IP地址是否在同一个网段,将它们的IP地址分别与子网掩码做与运算,得到的结果为网络号,如果网络号相同,就在同一子网,否则,不在同一子网

用strtok切割字符串,可以实现把IP地址切割的功能,下面的处理还没做,先贴上分割代码,其余的就是组合字符串。

#include "stdafx.h"
#include<iostream>
using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
{
    char mask[] = "255.255.256.0";
    char* result = NULL;
    result = strtok(mask, ".");//第一次分割完后str变为第一段字符,剩下段的字符存储在静态区
    while (result != NULL)
    {
        printf("%s\n", result);
        result = strtok(NULL, ".");//剩下几次调用str位置用NULL
    }
    return 0;
}
//说明:如何判断两个IP地址是否在同一网段中,判断依据为:每个IP与掩码相与,结果相同为0,不同为1,ip类型不合适为2

#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<iostream>
#include<string>
using namespace std;
typedef struct  IPstruct
{
    int first;
    int second;
    int third;
    int fourth;
    int Isip;
};

IPstruct Segment_str(char* mask_addr)
{
    IPstruct ipnum;

    ipnum.Isip = 0;
    string Smask_addr = string(mask_addr);
    int index = 0;
    ipnum.first = atoi(&Smask_addr[0]);
    if (ipnum.first > 255 || ipnum.first < 0)
    {
        ipnum.Isip = 2;
    }

    index++;
    index = Smask_addr.find_first_of('.', index);
    ipnum.second = atoi(&Smask_addr[++index]);
    if (ipnum.second > 255 || ipnum.second < 0)
    {
        ipnum.Isip = 2;
    }


    index++;
    index = Smask_addr.find_first_of('.', index);
    ipnum.third = atoi(&Smask_addr[++index]);
    if (ipnum.third > 255 || ipnum.third < 0)
    {
        ipnum.Isip = 2;
    }

    index++;
    index = Smask_addr.find_first_of('.', index);
    ipnum.fourth = atoi(&Smask_addr[++index]);
    return ipnum;
    if (ipnum.fourth > 255 || ipnum.fourth < 0)
    {
        ipnum.Isip = 2;
    }
}
int checkNetSegment(char* mask_addr, char* ip1_addr, char* ip2_addr)
{   //SE=segment
    IPstruct SE_mask_addr, SE_ip1_addr, SE_ip2_addr;
    SE_mask_addr = Segment_str(mask_addr);
    SE_ip1_addr = Segment_str(ip1_addr);
    SE_ip2_addr = Segment_str(ip2_addr);
    int ISIP;
    if (SE_mask_addr.Isip == 2 || SE_mask_addr.Isip == 2 || SE_mask_addr.Isip == 2)
        return 2;
    else
    {
        SE_ip1_addr.first = SE_ip1_addr.first & SE_mask_addr.first;
        SE_ip1_addr.second = SE_ip1_addr.second & SE_mask_addr.second;
        SE_ip1_addr.third = SE_ip1_addr.third & SE_mask_addr.third;
        SE_ip1_addr.fourth = SE_ip1_addr.fourth & SE_mask_addr.fourth;

        SE_ip2_addr.first = SE_ip2_addr.first & SE_mask_addr.first;
        SE_ip2_addr.second = SE_ip2_addr.second & SE_mask_addr.second;
        SE_ip2_addr.third = SE_ip2_addr.third & SE_mask_addr.third;
        SE_ip2_addr.fourth = SE_ip2_addr.fourth & SE_mask_addr.fourth;

        if (SE_ip2_addr.first == SE_ip1_addr.first&&SE_ip2_addr.second == SE_ip1_addr.second&&SE_ip2_addr.third == SE_ip1_addr.third&&SE_ip2_addr.fourth == SE_ip1_addr.fourth)
            return 0;
        else
            return 1;
    }



}
int _tmain(int argc, _TCHAR* argv[])
{
    char* mask_addr = "255.255.256.0";
    char* ip1_addr="192.168.0.1";
    char* ip2_addr ="192.168.0.3";
    int a=checkNetSegment(mask_addr,ip1_addr,ip2_addr);
    while (1);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/snwang_miss/article/details/78204694