题解 | 密码验证合格程序
密码验证合格程序
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; }