题解 | #验证IP地址#

验证IP地址

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

思路很简单,就是把字符串遍历,然后想一些特殊case就可
C语言版本

/**
 * 验证IP地址
 * @param IP string字符串 一个IP地址字符串
 * @return string字符串
 */

int IPv4(char* IP)
{
    int tmp_ipv4 = 0;
    int count = 0;
    while(*IP)
    {
        while(*IP != '.' && *IP != '\000' && *IP != ':')
        {
            char* IP_tmp = IP;
            IP_tmp++;
            if(*IP == '0' && *IP_tmp != '0')
            {
                if(*IP_tmp == '.')
                {
                    IP++;
                    continue;
                }
                return 0;
            }
            tmp_ipv4 = tmp_ipv4*10+((int)(*IP)-48);
            IP++;
        }
        IP++;
        if(tmp_ipv4>=0 && tmp_ipv4<=255)
        {
            count++;
            tmp_ipv4 = 0;
        }
        else return 0;
    }
    if(count==4) return 1;
    return 0;
}

int IPv6(char* IP)
{
    int count_ipv6 = 0;
    int count_6 = 0;
    while(*IP)
    {
        while(*IP != ':' && *IP != '\000' && *IP != '.')
        {
            if(*IP >='a' && *IP <= 'e' || *IP >='A' && *IP <= 'E' || *IP >='0' && *IP <= '9')
            {
                count_ipv6++;
                IP++;
            }
            else
            {
                return 0;
            }
        }
        count_6++;
        if(count_ipv6 == 4)
        {
            IP++;
            count_ipv6=0;
        }
        else if(count_ipv6 < 4 && count_ipv6>0 && *IP == ':') 
        {
            IP++;
            count_ipv6=0;
        }
        else return 0;
    }
    if(count_6==8) return 1;
    return 0;
}
char* solve(char* IP ) {
    // write code here
    int res_4 = IPv4(IP);
    if(res_4==1) return "IPv4";
    int res_6 = IPv6(IP);
    if(res_6==1) return "IPv6";
    return "Neither";
}

C++版本

class Solution {
public:
    /**
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
int IPv4(string IP_N)
{
    int tmp_ipv4 = 0;
    int count = 0;
    char* IP = &IP_N[0];
    int lenth = 4;
    while(lenth)
    {
        while(*IP != '.' && *IP != ':' && *IP != '\000')
        {
            char* IP_tmp = IP;
            IP_tmp++;
            if(*IP == '0' && *IP_tmp != '0')
            {
                if(*IP_tmp == '.')
                {
                    IP++;
                    continue;
                }
                return 0;
            }
            tmp_ipv4 = tmp_ipv4*10+((int)(*IP)-48);
            IP++;
        }
        IP++;
        lenth--;
        if(tmp_ipv4>=0 && tmp_ipv4<=255)
        {
            count++;
            tmp_ipv4 = 0;
        }
        else return 0;
    }
    if(count==4) return 1;
    return 0;
}

int IPv6(string IP_N)
{
    int count_ipv6 = 0;
    int count_6 = 0;
    char* IP = &IP_N[0];
    int lenth = 8;
    while(lenth)
    {
        while(*IP != ':' && *IP != '\000' && *IP != '.')
        {
            if(*IP >='a' && *IP <= 'e' || *IP >='A' && *IP <= 'E' || *IP >='0' && *IP <= '9')
            {
                count_ipv6++;
                IP++;
            }
            else
            {
                return 0;
            }
        }
        count_6++;
        lenth--;
        if(count_ipv6 == 4)
        {
            IP++;
            count_ipv6=0;
        }
        else if(count_ipv6 < 4 && count_ipv6>0 && *IP == ':')
        {
            IP++;
            count_ipv6=0;
        }
        else return 0;
    }
    if(count_6==8) return 1;
    return 0;
}

    string solve(string IP) {
        // write code here
        int res_4 = IPv4(IP);
        if(res_4==1) return "IPv4";
        int res_6 = IPv6(IP);
        if(res_6==1) return "IPv6";
        return "Neither";
    }
};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

07-15 12:24
重庆大学 运营
坏消息:和好工作擦肩而过
给点吧求求了:怎么可能因为差几秒,估计就是简历更好看婉拒了
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 18:05
何尝不是一种学历歧视呢
码农索隆:楼主明确拒绝,并说明拒绝原因了,这hr倒是挺忠心护主的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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