题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <stdio.h>
#include <string.h>
#define PWD_VALID "OK\n"
#define PWD_INVAL "NG\n"
#define NUMBER 0
#define DAXIE 1
#define XIAOX 2
#define SYMBOL 3
#define By3(n) ((*(int*)(str+n))&0xffffff00)
int StrRepetation(char *str){
int len = strlen(str);
for(int i=0;i<len-4;i++){
for(int j=i+1;j<len-3;j++){
if(By3(i)==By3(j)) return 0;
}
}
return 1;
}
int main() {
char pwd[101] = {0};
int length=0;
char Flag[4] = {0};
while(scanf("%s",pwd) != EOF){
length = strlen(pwd);
if(length<=8){
printf(PWD_INVAL);
continue;
}
for(int i=0;i<length;i++){
if((pwd[i]>='0'&&(pwd[i]<='9'))) Flag[NUMBER] = 1;
else if((pwd[i]>='a'&&(pwd[i]<='z'))) Flag[XIAOX] = 1;
else if((pwd[i]>='A'&&(pwd[i]<='Z'))) Flag[DAXIE] = 1;
else if((pwd[i]>='!'&&(pwd[i]<='~'))) Flag[SYMBOL] = 1;
else{
printf(PWD_INVAL);
continue;
}
}
if((Flag[0]+Flag[1]+Flag[2]+Flag[3]) < 3){
*(int*)Flag = 0;
printf(PWD_INVAL);
continue;
}
if(StrRepetation(pwd)) printf(PWD_VALID);
else printf(PWD_INVAL);
}
}
查看4道真题和解析