题解 | #合法IP#

合法IP

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

//按照要求逐一判断合法性,当然如果输入流和字符串函数用的熟练可以适当简化,例如sscanf等
#include <stdio.h>
#include<string.h>
int main()
{
    int i = 0, j = 0, num[3], n = 0;
    char arr[16];
    scanf("%s", arr);
    int sz = strlen(arr);
    if (sz > 15 || sz < 7)
    {
        printf("NO\n");
        return 0;
    }
    for (i = 0; i < sz; i++)
    {
        if ((arr[i] <= '9' && arr[i] >= '0') || (arr[i] == '.'))
        {
            continue;
        }
        printf("NO\n");
        return 0;
    }
    for (i = 0; i < sz; i++)
    {
        if (arr[i] == '.')
        {
            num[j] = i;
            j++;
        }
    }
    if (!((j == 3) && (num[0] <= 3) && (num[0] >= 1) && (num[1] >= 3) && (num[1] <= 7) && (num[2] >= 5) && (num[2] <= 11)))
    {
        printf("NO\n");
        return 0;
    }
    for (i = 0; num[0] - i > 0; i++)
    {
        n = n * 10 + arr[i] - 48;
    }
    if (n > 255)
    {
        printf("NO\n");
        return 0;
    }
    if (num[0] > 1 && arr[0] == '0')
    {
        printf("NO\n");
        return 0;
    }
    n = 0;
    for (i = num[0] + 1; num[1] - i > 0; i++)
    {
        n = n * 10 + arr[i] - 48;
    }
    if (n > 255)
    {
        printf("NO\n");
        return 0;
    }
    if ((i > num[0] + 2) && (arr[num[0] + 1] == '0'))
    {
        printf("NO\n");
        return 0;
    }
    n = 0;
    for (i = num[1] + 1; num[2] - i > 0; i++)
    {
        n = n * 10 + arr[i] - 48;
    }
    if (n > 255)
    {
        printf("NO\n");
        return 0;
    }
    if ((i > num[1] + 2) && (arr[num[1] + 1] == '0'))
    {
        printf("NO\n");
        return 0;
    }
    n = 0;
    for (i = num[2] + 1; i < sz; i++)
    {
        n = n * 10 + arr[i] - 48;
    }
    if (n > 255)
    {
        printf("NO\n");
        return 0;
    }
    if ((i > num[2] + 2) && (arr[num[2] + 1] == '0'))
    {
        printf("NO\n");
        return 0;
    }
    printf("YES\n");
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-23 14:22
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
球球别拷打俺了:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司10个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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