首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

!再弄不出来,小弟我就要被开除了!

2012-02-20 
救命啊!再弄不出来,我就要被开除了!!实现这样的功能:给你IP地址和它的掩码,让你判断某个IP,是否在这个网段

救命啊!再弄不出来,我就要被开除了!!
实现这样的功能:
      给你IP地址和它的掩码,让你判断某个IP,是否在这个网段之内。
      例如:给你
        58.32.0.0/17
        58.32.0.0     ---》IP地址
        17                   ---》掩码(表示IP前面17位不变,后面15位清零)

    这样:58.32.0.0/17   就表示这样一个网段:
      00111010   00100000   00000000   00000000
                                  到
      00111010   00100000   01111111   11111111

这时输入一个IP,比如:58.32.0.1,要你的程序判断是否在这个网段之内。
      大体就是这样子。
 
    我写了一个,   大家帮忙看看我这有没有错误.

===========================================================================
#include   <iostream>
#include   <string.h>
#include   <stdlib.h>
#include   <sys/socket.h>
#include   <netinet/in.h>
#include   <arpa/inet.h>
using   namespace   std;
//Class   analysis_char,   把   char   类型的IP地址转换成   int   类型  
class   analysis_char
{
public:
                      int   int_ipaddress;//返回int类型的   ip  
                      int   int_mask;//返回int类型的   mask  
                      char   char_ipandmask[20];
                      char   charbuffer[20];
                      analysis_char   (char   *x)   {   char_ipandmask   =   x;}
                  ~analysis_char();                
                      void   analysis();
                      void   init_charbuffer();
};

//analysis_char   类的成员函数,用来实现IP地址   char类型的到   int类型的转换  
void   analysis_char   ::   analysis()
{
                //定义字符串缓冲区
            char   *pcharbuffer;
                pcharbuffer   =   charbuffer;
                //定义两个指针,同时指向char_ipandmask的首地址  
                char   *p1,   *p2;  
        p1   =   char_ipandmask;
        p2   =   p1;
        while   (*p2   !=   NULL)  
        {
        //若p2指向‘/’,输出网络地址
        if   (*p2   ==   '/ ')
        {
                                        memcpy   (pcharbuffer,   p1,   (p2-p1));
                                        int_ipaddress   =   inet_addr(pcharbuffer);


                                        init_charbuffer();
                                        p2++;
                                        p1   =   p2;
                                  }
              //若p2指向str2,输出掩码
            else   if   (*p2   ==   ', ')
                                  {
                                        memcpy   (pcharbuffer,   p1,   (p2-p1));
                                        int_mask   =   atoi(pcharbuffer);
                                        init_charbuffer();
                                        p2++;
                                        p1   =   p2;
                                    }
                                    p2++;
              }
}

//将字符串缓冲区清零  
void   analysis_char   ::   init_charbuffer()
{
                      for   (int   i   =   0;   i   <   20;   i++)
                      {  
                              charbuffer[i]   =   NULL;
                      }
}


//读取用户输入的IP地址,并将其转换成int类型  
void   get_ipaddress(analysis_char   x)
{
          unsigned   long   int   int_getipaddress;
          char   char_getipaddress[20];
          char   *pchar_getipaddress;
          pchar_getipaddress   =   char_getipaddress;
          cout   < <   "Please   input   the   ipaddress:\n ";
          gets(char_getipaddress);
          int_getipaddress   =   inet_addr(pchar_getipaddress);
          int_getipaddress   > >   analysis.int_mask;
          int_getipaddress   < <   analysis.int_mask;


          if   (int_getipaddress   !=   analysis.int_mask)
          cout   < <   "No!!\n ";
          cout   < <   "YES!!\n ";
}
 
int   main()
{
        analysis_char   analysis( "58.32.0.0/17, ");
        get_ipaddress(analysis);
    return   0;
}  

===========================================================================


[解决办法]
//你的参数是analysis_char x这样子,而在下面你用analysis这个变量,当然没有定义了。
楼上几位的方法都不错的!


void get_ipaddress(analysis_char x)
{
unsigned long int int_getipaddress;
char char_getipaddress[20];
char *pchar_getipaddress;
pchar_getipaddress = char_getipaddress;
cout < < "Please input the ipaddress:\n ";
gets(char_getipaddress);
int_getipaddress = inet_addr(pchar_getipaddress);
int_getipaddress > > x.int_mask;
int_getipaddress < < x.int_mask;
if (int_getipaddress != x.int_mask)
cout < < "No!!\n ";
cout < < "YES!!\n ";
}

热点排行