题解 | #合法IP#

合法IP

https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9

#include <bits/stdc++.h>
#include <arpa/inet.h>
#include <regex>

using namespace std;

void process(string ip){
    regex pattern("((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\.){4}");//匹配0.0.0.0.-255.255.255.255.的正则表达式
    ip += "."; //正则表达式匹配的四个点,ip地址后面再加一个
    if(regex_match(ip, pattern)) //匹配函数
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    
}

//判断ip
/*判断IP地址是否合法,如果满足下列条件之一即为非法地址
数字段数不为4
存在空段,即【192..1.0】这种
某个段的数字大于255
*/
//一个ip实际上是由4个[0,255] 之间的值拼接而成, 所以验证其是否都在范围内即可
bool judgeIP(string s){
    int count = 0;
    stringstream iss(s);
    string tmp = "";
    while(getline(iss, tmp, '.')){
        if(++count > 4 || tmp.empty() || stoi(tmp) > 255 
           || stoi(tmp) < 0 || (tmp.size() > 1 && (tmp[0]=='0' || !isdigit(tmp[0]) ))
          ){
            return false;
        } 
    }
    return count == 4;
}

int main(){
    string IP = "";
    while(cin >> IP){
        /*//法一
        struct sockaddr_in sa;
        //inet_pton这个函数在成功时返回1,失败时返回0
        if(inet_pton(AF_INET, IP.c_str(), &(sa.sin_addr))) cout << "YES" << endl;
        else cout << "NO" << endl;*/
        
        //法二
        if(judgeIP(IP)) cout << "YES" << endl;
        else cout << "NO" << endl;
        
        //法三
        //process(IP);
    }
    
    return 0;
}

华为题库题解 文章被收录于专栏

牛客华为题库的题解

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务