题解 | #合法IP#

合法IP

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

#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>

bool strvalid(char* str) {
    int len = 0;
    int dot[10]={0};
    int dot_i = 0;
    while (str[len]) {
        if (!(str[len] =='.' || isdigit(str[len]))) return false;
        if (str[len] == '.') {
            dot[dot_i] = len;
            dot_i++;
            // printf("%d %d %d\n", len, dot_i,dot[dot_i-1]);
        }
        len++;
        for (int i=0; i<len-1; i++) {
            if(str[len] == '.' && str[len+1] == '.')return false;
        }
    }
    //int x=str[0] == '0' && str[1] != '.';
    // int x1=str[dot[0] + 1] == '0' && str[dot[0] + 2] != '.';
    // int x2=str[dot[1] + 1] == '0' && str[dot[1] + 2] != '.';
    // int x3=str[dot[2] + 1] == '0' && dot[2] != len-2;
    // int x4=dot_i != 3;
    // printf("x=%d %d %d %d %d\n",x,x1,x2,x3,x4);
    if ((str[0] == '0' && str[1] != '.')
            || (str[dot[0] + 1] == '0' && str[dot[0] + 2] != '.')
            || (str[dot[1] + 1] == '0' && str[dot[1] + 2] != '.')
            || (str[dot[2] + 1] == '0' && dot[2] != len-2)
            || dot_i != 3) {
        // printf("f2");
        return false;
    }
    return true;
}

bool numvalid(char* str) {
    int a, b, c, d;
    sscanf(str, "%d.%d.%d.%d", &a, &b, &c, &d);
    if ((a >= 0 && a < 256) && (b >= 0 && b < 256) && (c >= 0 && c < 256) &&
            (d >= 0 && d < 256))return true;
    //printf("f3");
    return false;
}

int main() {
    char str[100];
    while (~scanf("%s", str)) {
        printf("%s\n", strvalid(str) && numvalid(str) ? "YES" : "NO");
    }
}

格式可真恶心,,一遍遍调吧。。。笨方法

全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务