题解 | #密码验证合格程序#

密码验证合格程序

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);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务