题解 | #验证IP地址#

验证IP地址

https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 验证IP地址
 * @param IP string字符串 一个IP地址字符串
 * @return string字符串
 */
#include <ctype.h>
#include <string.h>

int str_to_10(char* s,char* e)
{
    if(s == e ||('0'==s[0] && '0' != s[1]))
        return 256;

    int num = 0;
    while(s<e)
    {
        if(!isdigit(*s))
            return 256;
            
        num = num*10 + (*s++ -'0');
    }
    return num;
}

int str_to_16(char* s,char* e)
{
    if(s == e || ('0'==s[0] && '0' == s[1]))
        return 65536;

    int num = 0;
    while(s<e)
    {
        if(!isxdigit(*s))
            return 65536;
        if(isalpha(*s))
            num = num*16 + (*s++ -'0');
        else if(islower(*s))
            num = num*16 + (*s++ -'a');
        else
            num = num*16 + (*s++ -'A');;
    }
    return num;
}

int is_ipv4(char* IP)
{
    char *s = IP, *e = NULL, n = 0;
    while(NULL != (e=strchr(s,'.')))
    {
        if(255 < str_to_10(s,e))
            return 0;
        s = e + 1;
        n++;
    } 

    return !(3 != n || 255 < str_to_10(s,s+strlen(s)));
}

int is_ipv6(char* IP)
{
    char *s = IP, *e = NULL, n = 0;
    while(NULL != (e=strchr(s,':')))
    {
        if(65535 < str_to_16(s,e))
            return 0;
        s = e + 1;
        n++;
    } 

    return !(7 != n || 65535 < str_to_16(s,s+strlen(s)));
}

char* solve(char* IP ) 
{
    // write code here
    if(is_ipv4(IP))
        return "IPv4";
    else if(is_ipv6(IP))
        return "IPv6";
    return "Neither";
}

全部评论

相关推荐

关于我大学本科四年,想了很多,但还是不知道该怎么动笔&nbsp;“大学四年,是我从懵懂少年走向职场青年的转折期。这一路跌跌撞撞,有迷茫,有遗憾,也有成长和决心。”&nbsp;大一刚进来时仍然有高中那股学习劲,经常一个人去图书馆学高等数学,但后面劲头一过便开始在宿舍开启躺平生活(现在想想那段时间真的很爽,无忧无虑)。由于大一担任班干部,所以经常要跟其他班的班干部交流,在此期间认识了隔壁班的一位女生,短发而很可爱,因为很多团建还有比赛都是我们两班一起参加的,而且我和她都是负责人,所以交集很多,后面慢慢地彼此对产生了好感,所以在大一刚开学的2个月后,我们在一起了,彼此之前都是初恋。但当时我真的是太太太直男了,对感情的想...
真烦好烦真烦:骗哥们可以,别把你自己也骗到了就行。哥们被你骗了真无所谓的,打个哈哈就过了。但希望你打完这段话后擦一下眼角,别让眼泪掉在手机屏幕上了就行。你说的这些话,哥们信一下也是没什么的。还能让你有个心里安慰,但这种话说出来骗骗兄弟就差不多得了,哥们信你一下也不会少块肉,但是你别搞得自己也当真了就行。哥们被你骗一下是真无所谓的,兄弟笑笑也就过去了。真不是哥们想要破你防,你擦擦眼泪好好想想,除了兄弟谁还会信你这些话?
点赞 评论 收藏
分享
重生我想学测开:嵌入式的问题,我准备入行京东外卖了
点赞 评论 收藏
分享
深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务