题解 | 密码验证合格程序
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#define BUFFER_LENGTH (101)
int uppercase_flag = 0;
int lowercase_flag = 0;
int digit_flag = 0;
int special_char_flag = 0;
int repeat_flag = 0;
void identify_char(char a) {
if ((a >= 33 && a <= 47) ||
(a >= 123 && a <= 126)) {
special_char_flag = 1;
// printf("%c is special char\n", a);
} else if (a >= 48 && a <= 57) {
digit_flag = 1;
// printf("%c is digit char\n", a);
} else if (a >= 65 && a <= 90) {
uppercase_flag = 1;
// printf("%c is uppercase char\n", a);
} else if (a >= 97 && a <= 122) {
lowercase_flag = 1;
// printf("%c is lowercase char\n", a);
}
}
int main() {
char buffer[BUFFER_LENGTH];
while (fgets(buffer, BUFFER_LENGTH, stdin)) {
buffer[strlen(buffer)-1] = '\0';
// printf("%s\n", buffer);
int length = strlen(buffer);
if (length < 8) {
printf("NG\n");
// printf("length problem\n");
} else {
for (int i=0; i<length-3; i++) {
// printf("%c\n", buffer[i]);
identify_char(buffer[i]);
if (i == length-4) {
// printf("%c\n", buffer[i+1]);
identify_char(buffer[i+1]);
// printf("%c\n", buffer[i+2]);
identify_char(buffer[i+2]);
// printf("%c\n", buffer[i+3]);
identify_char(buffer[i+3]);
}
for (int j=i+3; j<length-2;j++) {
if (buffer[i] == buffer[j] &&
buffer[i+1] == buffer[j+1] &&
buffer[i+2] == buffer[j+2]) {
repeat_flag = 1;
break;
}
}
if (repeat_flag) {
break;
}
}
if (repeat_flag || (uppercase_flag+lowercase_flag+digit_flag+special_char_flag < 3)) {
printf("NG\n");
// if (repeat_flag) {
// printf("repeat problem\n");
// }
// int types_num = uppercase_flag+lowercase_flag+digit_flag+special_char_flag;
// if (types_num < 3) {
// printf("only %d types\n", types_num);
// }
} else {
printf("OK\n");
}
}
uppercase_flag = 0;
lowercase_flag = 0;
digit_flag = 0;
special_char_flag = 0;
repeat_flag = 0;
}
return 0;
}

