题解 | #密码安全等级#

#include<stdio.h>
#include<string.h>

#define VERY_WEAK 0
#define WEAK 1
#define AVERAGE 2
#define STRONG 3
#define VERY_STRONG 4
#define SECURE 5
#define VERY_SECURE 6
char *data_out[]={"VERY_WEAK","WEAK","AVERAGE","STRONG", \
    "VERY_STRONG","SECURE","VERY_SECURE"};

/*
* 0位:0 没有字母, 1 大写/小写 2 大小写
*.1位:小写
*.2位:大写
*.3位:符号个数
*.4位:数字个数

*.9 奖励
*/
#define true (10 >= 1)
#define symbols 3
#define num 4
#define capital_ch 2
#define small_ch 1
#define mark_ch 0

#pragma pack(1);
typedef struct node{
    int data_scoer_mark[10];
    char *ch_in;
    int length;
    int score_value;
    char *ch_out_score;
} typenode;
#pragma pack();
// 输出字符出数组
void ch_test(typenode *data){
    // 这里题目没有设置非法字符
    char * ch = data->ch_in;
    int i = 0;
    while(i < data->length){
        if(ch[i] >= '0' && ch[i] <= '9'){
            data->data_scoer_mark[num]++;
        }
        else if(ch[i] >= 'a' && ch[i] <= 'z'){
            data->data_scoer_mark[small_ch]++;
        }
        else if(ch[i] >= 'A' && ch[i] <= 'Z'){
            data->data_scoer_mark[capital_ch]++;
        }
        else {
            data->data_scoer_mark[symbols]++;
        }
        i++;
    }
    // 字母处理
    if(data->data_scoer_mark[small_ch] > 0) data->data_scoer_mark[0]++;
    if(data->data_scoer_mark[capital_ch] > 0) data->data_scoer_mark[0]++;
    if(data->data_scoer_mark[mark_ch] == 2) data->score_value += 20;
    else if(data->data_scoer_mark[mark_ch] = 1)  data->score_value += 10;
    // 数字处理
    if(data->data_scoer_mark[num] == 1) data->score_value += 10;
    else if(data->data_scoer_mark[num] >= 2) data->score_value += 20;
    // 符号处理
    if(data->data_scoer_mark[symbols] == 1) data->score_value += 10;
    else if(data->data_scoer_mark[symbols] >= 2) data->score_value += 25;
}

void length_test(typenode *data){
    data->length = strlen(data->ch_in);
    if(data->length >= 8) data->score_value += 25;
    else if(data->length >4) data->score_value += 10;
    else data->score_value += 5;
}
void award(typenode *data){
    if(data->data_scoer_mark[0] > 0 && data->data_scoer_mark[num] > 0){
        if(data->data_scoer_mark[symbols] > 0){
            
            if(data->data_scoer_mark[small_ch] > 0 && \
               data->data_scoer_mark[capital_ch] > 0) data->score_value += 5;
            else data->score_value += 3;
        }
        else data->score_value += 2;
    }
}
// 绑定输出字符串
void out_chtest(typenode *data){
    int score = data->score_value;
    if(score >= 90) data->ch_out_score=data_out[VERY_SECURE];
    else if(score >= 80) data->ch_out_score=data_out[SECURE];
    else if(score >= 70) data->ch_out_score=data_out[VERY_STRONG];
    else if(score >= 60) data->ch_out_score=data_out[STRONG];
    else if(score >= 50) data->ch_out_score=data_out[AVERAGE];
    else if(score >= 25) data->ch_out_score=data_out[WEAK];
    else data->ch_out_score=data_out[VERY_WEAK];
    /*
    switch(true){
        case (score >= 90): data->ch_out_score=data_out[VERY_SECURE];break;
        case (score >= 80): data->ch_out_score=data_out[SECURE];break;
        case (score >= 70): data->ch_out_score=data_out[VERY_STRONG];break;
        case (score >= 60): data->ch_out_score=data_out[STRONG];break;
        case (score >= 50): data->ch_out_score=data_out[AVERAGE];break;
        case (score >= 25): data->ch_out_score=data_out[WEAK];break;
        default:data->ch_out_score=data_out[VERY_WEAK];break;
    }
    */
}
// data结构体处理
void data_handle(typenode *data){
    char *ch = data->ch_in;
    // 长度判断 
    length_test(data);
    // 对字符进行处理
    ch_test(data);
    // 计算获奖
    award(data);
    // 绑定输出字符串
    out_chtest(data);
}
int main()
{
    typenode *data;
    data = (typenode *)malloc(sizeof(typenode));
    char ch_in[2000];
    while(EOF != scanf("%s", ch_in)){
        // 数据清零
        memset(data, 0, sizeof(typenode));
        // 将密码与data中的ch_in 绑定
        data->ch_in = ch_in;
        // 调用处理函数
        //使用处理函数对数据进行处理,以及对data进行填充
        data_handle(data);
        // 输出结果
        printf("%s\n", data->ch_out_score, data->score_value);
    }
    return 0;
}
全部评论

相关推荐

某物流公司 软件开发岗 总包26-30
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务