题解 | #密码验证合格程序#

密码验证合格程序

https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

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

//11.12-11.34 20分钟
int main() {
    char str[102] = {0};

    while (fgets(str, sizeof(str), stdin) != NULL) {
        str[strcspn(str, "\r")] = 0;
        str[strcspn(str, "\n")] = 0;

        int len = strlen(str);
        if (len <= 8) {
            printf("NG\n");
            continue;
        }
        
        //检查大小写等
        char lower = 0, upper = 0, dig = 0, sign = 0;
        int i = 0;
        for (i = 0; i < len; i++) {
            //printf("str[i]:%c\n", str[i]);
            if (str[i] >= 'a' && str[i] <= 'z') {
                lower = 1;
            } else if (str[i] >= 'A' && str[i] <= 'Z') {
                upper = 1;
            } else if (str[i] >= '0' && str[i] <= '9') {
                dig = 1;
            } else {
                sign = 1;
            }

            if (lower + upper + dig + sign >= 3) {
                break;
            }
        }
        if ((lower + upper + dig + sign) < 3) {
            printf("NG\n");
            //printf("%d %d %d %d\n", lower , upper , dig , sign);
            continue;
        }

        //检查字串
        char sub_str[4] = {0};
        char repeat_substr = 0;
        for (i = 0; i < len-3; i++) {
            memset(sub_str, 0, sizeof(sub_str));
            memcpy(sub_str, str+i, 3);
            if (strstr(str+i+1, sub_str)) {
                repeat_substr = 1;
                break;
            }
        }

        if (repeat_substr) {
            printf("NG\n");
        }
        else {
            printf("OK\n");
        }


        memset(str, 0, sizeof(str));
    }
    return 0;
}

全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 11:15
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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