题解 | 密码验证合格程序

密码验证合格程序

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

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

// Q1: 字符串重复子串判断

void CheckPasswd(char* str) 
{
    // int upCnt, lowCnt, digCnt = 0; 这种是错误用法,只会初始化最后一个变量为 0, 其余变量还是随机值
    int upCnt = 0;
    int lowCnt = 0;
    int digCnt = 0;
    int otherCnt = 0;

    int len = strlen(str);
    if (len <= 8) {
        goto err;
    }

    for (int i = 0; i < strlen(str); i++) {
        if (str[i] == '\n' || str[i] == ' ') {
            goto err;
        } else if (str[i] >= '0' && str[i] <= '9') {
            // 不需要 digCnt++ 只需要判断是否存在即可
            digCnt = 1;
        } else if (str[i] >= 'a' && str[i] <= 'z') {
            lowCnt = 1;
        } else if (str[i] >= 'A' && str[i] <= 'Z') {
            upCnt = 1;
        } else {
            otherCnt = 1;
        }

        // 判断重复字符串
        char* p = str + i;
        for (int j = i + 3; j < len; j++) {
            char* q = str + j;
            if ((*p == *q) && (0 == strncmp(p, q, 3))) {
                goto err;
            }
        }
    }

    if ((digCnt + lowCnt + upCnt + otherCnt) < 3) {
        goto err;
    }

    printf("OK\n");
    return;

err:
    printf("NG\n");
    return;
}

int main() {
    char str[101] = "";
    while (scanf("%100s", str) != EOF) {
        CheckPasswd(str);
    }

    return 0;
}

全部评论

相关推荐

04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务