题解 | #合法IP#

合法IP

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

#include <stdio.h>
#include <string.h>

int split(char str[50],char **sub)
{
    int num=0;
    char key[2]=".";
    char *q=str;
    q=strtok(str,key);
    while(q)
    {
        sub[num++]=q;
        q=strtok(NULL,key);
    }
    //printf("num=%d\n",num);
    return num;    //num 我在sub[]中已经自增了一次,就不要再自增了,以及最后的num输出究竟是++num还是num++还是num,这个容易出错
}

int is_OK(char IP[10])
{
    int i=0;
    int len=strlen(IP);
    //printf("%s\n",IP);
    //printf("IP[0]=%c\n",IP[0]);
    for(i=0;i<len;i++)
    {
        if(IP[i]>'9'||IP[i]<'0')
        {
            //printf("flag1\n");
            return 0;
        }
    }
    i=0;
    if(IP[i]=='0'&&IP[i+1]!='\0')  //一个是忘记了==,一个是忘记了给0上''
    {
        //printf("flag2\n");
        return 0;
    }
    int a =atoi(IP);
    if(a<0||a>255)
    {
        //printf("flag3\n");
        return 0;
    }
    return 1;
}

int main() 
{
    char str[50]={0};
    char *sub[10]={0};
    while (scanf("%s",str) != EOF) 
    { 
        if(split(str, sub)!=4)
        {
            //printf("aaaa\n");
            printf("NO\n");
            continue;
        }
        else
        {
            int i=0;
            int ret=1;
            for(i=0;i<4;i++)
            {
                //printf("is_OK=%d\n",is_OK(sub[i]));
                ret &= is_OK(sub[i]);
            }
            if(ret==1)
            {
                printf("YES\n");
                continue;
            }
            else
            {
                printf("NO\n");
                continue;
            }
        }
    }
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务