题解 | 密码验证合格程序

密码验证合格程序

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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