C++判斷ip地址是否合法


題目難度不大,主要想復(fù)習(xí)幾個(gè)知識(shí)點(diǎn)。

  1. string類成員函數(shù),特別是字符串查找函數(shù)find(),find()函數(shù)的第一個(gè)形參是要被搜索的字符串,第二個(gè)形參是在源串中開始搜索的下標(biāo)位置,總是記反 :(
  2. 數(shù)字字符轉(zhuǎn)數(shù)字??梢允褂胹toi()函數(shù),還有一種方法就是使用c++標(biāo)準(zhǔn)庫sstream,<sstream>庫定義了三種類:istringstream、ostringstream、stringstream,分別進(jìn)行流的輸入、輸出以及輸入輸出操作??梢詫?shí)現(xiàn)對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行字符/數(shù)字轉(zhuǎn)換。
    詳情參考鏈接:http://www.itdecent.cn/p/cafe63f670b9
  3. 使用正則表達(dá)式,對(duì)于字符序列的處理,推薦使用正則表達(dá)式,真的很間接,而且正則表達(dá)式的語法規(guī)則通用,c++、python等高級(jí)編程語言都有提供正則表達(dá)式包。
    參考鏈接:
    1)http://www.itdecent.cn/p/e8158ea41906
    2)https://www.jb51.net/article/104447.htm
    3)https://www.jb51.net/article/174385.htm
/*題目描述
現(xiàn)在IPV4下用一個(gè)32位無符號(hào)整數(shù)來表示,一般用點(diǎn)分方式來顯示,點(diǎn)將IP地址分成4個(gè)部分,每個(gè)部分為8位,表示成一個(gè)無符號(hào)整數(shù)(因此不需要用正號(hào)出現(xiàn)),如10.137.17.1,是我們非常熟悉的IP地址,一個(gè)IP地址串中沒有空格出現(xiàn)(因?yàn)橐硎境梢粋€(gè)32數(shù)字)。
現(xiàn)在需要你用程序來判斷IP是否合法。
輸入描述:
輸入一個(gè)ip地址
輸出描述:
返回判斷的結(jié)果YES or NO
*/
#include<iostream>
#include<string>
#include<sstream>
#include<regex>

using namespace std;

bool isIp(string ipstr)
{
    int num;
    int j=0;
    for(int i=0;i<3;++i){
        int index=ipstr.find('.',j);
        num = stoi(ipstr.substr(j,index-j));
        if(num<0 || num>255) return false;
        j=index+1;
    }
    string end=ipstr.substr(j);
    for(int i=0;i<end.length();++i){
        if(end[i]<'0' || end[i]>'9') return false;
    }
    num = stoi(end);
    if(num<0 || num>255) return false;
    return true;
}

bool isIp1(string ipstr)
{
    istringstream ipstream(ipstr);
    int num[4];
    char point[3];
    string end;
    ipstream>>num[0]>>point[0]>>num[1]>>point[1]>>num[2]>>point[2]>>num[3]>>end;
    for(int i=0;i<3;++i){
        if(num[i]<0 || num[i]>255) return false;
        if(point[i]!='.') return false;
    }
    if(num[3]<0 || num[3]>255) return false;
    if(!end.empty()) return false;
    return true;
}

//使用正則表達(dá)式
bool isIp2(string ipstr)
{
    regex pattern("((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)");
    smatch res;
    if(regex_match(ipstr,res,pattern)){
        return true;
    }
    return false;
}

int main(int argc,char **argv)
{
    string ipstr;
    while(cin>>ipstr){
        bool res=isIp2(ipstr);
        if(res){
            cout<<"YES"<<endl;
        }
        else{
            cout<<"NO"<<endl;
        }
        // isIp2(ipstr);
    }
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容