• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            根據(jù)特定分割符拆分字符串、判斷字符串是否為IP

            ////////////////////////////////////////////////////////////
            //函數(shù)名: splitEx
            //功能:    根據(jù)特定的分隔符拆分字符串
            //輸入?yún)?shù):string& src-------------需要拆分的原字符串
            //          char ch-----------------分隔符
            //返回值:  string類型的動態(tài)數(shù)組(vector)
            /////////////////////////////////////////////////////////////  
            vector<string> Zone::splitEx(string& src, char ch)  
            {  
              vector<string> strs; 
             string last(&ch);
             string pro_str;
             char c_temp;

              //去掉字符串中的雙引號
             std::string::size_type First_pos = src.find("\"");
             std::string::size_type Last_pos = src.find_last_of("\"");
             if (First_pos == 0  && Last_pos !=std::string::npos)
             {
              src[Last_pos]='\0';
              string t_sTemp;
              for (int i=0;i<(int)src.size();++i)
              {
               if(i>0)
               {
                t_sTemp += src[i];
               }
              }
              strs.insert(strs.end(),t_sTemp);
              return strs;
             }

              //將字符串中多個(gè)連續(xù)的分隔符壓縮成一個(gè)
             for (int i=0;i<(int)src.size();++i)
             {
              if(i>0)
              {
                  if (src[i] == ch && src[i-1]==ch)
                  {
                     continue;
                  }
               }
                c_temp=src[i];
                pro_str += c_temp;
             }
               
             src=pro_str;

             int separate_characterLen = 1;//分割字符串的長度
                int lastPosition = 0,index = -1;  
                while (-1 != (index = src.find(ch,lastPosition)))  
                {  
                   string Temp= src.substr(lastPosition,index - lastPosition);
                   if(!Temp.empty())
                   {
                        strs.push_back(Temp));  
                    }
                    lastPosition = index + separate_characterLen;  

                }  
                string lastString = src.substr(lastPosition);//截取最后一個(gè)分隔符后的內(nèi)容   
                if (!lastString.empty() && lastString != last)
                {
                  //cout<<"push_back_end"<<endl;  
                   strs.push_back(lastString);//如果最后一個(gè)分隔符后還有內(nèi)容就入隊(duì) 
                 }

                return strs;  
            }  
            ////////////////////////////////////////////////////////////
            //函數(shù)名: IsIp
            //功能:    判斷字符串是否為IP
            //輸入?yún)?shù):string In-------字符串
            //返回值:  true-------是IP,false----------不是IP
            //修改記錄:暫無
            /////////////////////////////////////////////////////////////
            bool Zone::IsIp(string In)
            {
              int ip[4]={-1,-1,-1,-1};
              sscanf(In.c_str(),"%d.%d.%d.%d",&(ip[0]),&(ip[1]),&(ip[2]),&(ip[3]));
              if (ip[0]>-1 && ip[1]>-1 && ip[2]>-1 && ip[3]>-1)//是IP
              {
                   return true;
              }
              else
              {
                  return false;
              }
            }

            判斷是否為IP,也可以用inet_pton函數(shù)
             unsigned char buf[sizeof(struct in6_addr)];  
                int domain, s;  
                char str[INET6_ADDRSTRLEN];  
             
                //IP字符串 ——》網(wǎng)絡(luò)字節(jié)流  
                s = inet_pton(AF_INET, In.c_str(), buf);  
                if(s<=0)
                {  
                    return false;
                }
               
                return true;
            In是string對象,如果是IPV6,將 inet_pton的第一個(gè)參數(shù)改成AF_INET6,但是這個(gè)函數(shù)只在
            linux下,windows下是沒有的。在liunx下要包含sys/types.h、sys/socket.h、arpa/inet.h
            原型:int inet_pton(int af, const char *src, void *dst); 這個(gè)函數(shù)轉(zhuǎn)換字符串到網(wǎng)絡(luò)地址,第一個(gè)參數(shù)af是地址族,轉(zhuǎn)換后存在dst中
            返回值如果小于等于0就表示ip不合法。
            在windows平臺下,在windows的SDKs\v6.0A\Include\ws2tcpip.h, inet_pton was
            defined when NTDDI_VERSION >= NTDDI_LONGHORN with the following lines:

            #if (NTDDI_VERSION >= NTDDI_LONGHORN)
            WINSOCK_API_LINKAGE
            INT
            WSAAPI
            inet_pton(
                __in                                INT             Family,
                __in                                PCSTR           pszAddrString,
                __out_bcount(sizeof(IN6_ADDR))      PVOID           pAddrBuf
                );
            但是要注意windows版本(NTDDI_LONGHORN的windows版本是Windows Server 2008)

            posted on 2011-04-26 20:38 Benjamin 閱讀(1707) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            精品99久久aaa一级毛片| 久久人人爽人人爽人人AV东京热| 久久99精品国产麻豆宅宅| 亚洲精品99久久久久中文字幕 | 2020久久精品国产免费| 99久久国产热无码精品免费| 久久精品国产91久久综合麻豆自制| 伊人丁香狠狠色综合久久| 欧美色综合久久久久久| 久久久噜噜噜久久中文福利| 办公室久久精品| 久久天天躁狠狠躁夜夜avapp| 久久久久亚洲AV无码永不| 久久av免费天堂小草播放| 亚洲国产精品无码成人片久久| 青青国产成人久久91网| 久久国产色av免费看| 久久996热精品xxxx| 久久亚洲精品人成综合网| 久久精品无码一区二区日韩AV | 精品久久久久久无码人妻热| 久久精品国产99久久久古代 | 久久久久久久97| 99精品国产免费久久久久久下载| 国内精品久久久久影院日本 | 亚洲精品无码专区久久久| 国产日产久久高清欧美一区| 久久久久久久波多野结衣高潮 | 亚洲?V乱码久久精品蜜桃| 东京热TOKYO综合久久精品 | 国产成人精品综合久久久久| 热RE99久久精品国产66热| 国产精品毛片久久久久久久| 久久亚洲私人国产精品| 久久婷婷五月综合色奶水99啪 | 久久久久久午夜精品| 久久国产成人午夜aⅴ影院| 国产激情久久久久影院老熟女免费| 久久66热人妻偷产精品9| 久久天天躁狠狠躁夜夜96流白浆| 久久九九兔免费精品6|