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