题解 | #密码强度等级#

密码强度等级

https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;
//密码长度得分
int password_size(string s) {
    if (s.size() <= 4) {
        return 5;
    } else if (s.size() > 4 && s.size() < 8) {
        return 10;
    } else {
        return 25;
    }
}
//密码字母得分
int password_alpha(string s) {
    int sum_loweralpha = 0, sum_upperalpha = 0;
    for (int i = 0; i < 26; i++) {
        sum_loweralpha += count(s.begin(), s.end(), 'a' + i);
        sum_upperalpha += count(s.begin(), s.end(), 'A' + i);
    }
    if (sum_loweralpha == 0 && sum_upperalpha == 0) {
        return 0;
    } else if (sum_loweralpha != 0 && sum_upperalpha != 0) {
        return 20;
    } else {
        return 10;
    }
}
//密码数字得分
int password_num(string s) {
    int sum_num = 0;
    string t = "0123456789";
    for (auto it = t.begin(); it < t.end(); ++it) {
        sum_num += count(s.begin(), s.end(), *it);
    }
    if (sum_num == 0) {
        return 0;
    } else if (sum_num == 1) {
        return 10;
    } else {
        return 20;
    }
}
//密码符号得分
int password_signal(string s) {
    string t("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~");//注意两处转义字符:\"和\\
    int sum_signal = 0;
    for (auto it = t.begin(); it < t.end(); ++it) {
        sum_signal += count(s.begin(), s.end(), *it);
    }
    if (sum_signal == 0) {
        return 0;
    } else if (sum_signal == 1) {
        return 10;
    } else {
        return 25;
    }
}
//奖励得分,注意if-else语句要把“难”的条件放在前面
int reward(string s) {
    if (password_alpha(s) == 20 && password_num(s) != 0 &&
            password_signal(s) != 0) {
        return 5;
    } else if (password_alpha(s) != 0 && password_num(s) != 0 &&
               password_signal(s) != 0) {
        return 3;
    } else if (password_alpha(s) != 0 && password_num(s) != 0) {
        return 2;
    } else {
        return 0;//不可省略,否则奖励得分会出错
    }
}

int main() {
    string s;
    getline(cin, s);
    int size_score, alpha_score, num_score, signal_score, rew;
    size_score = password_size(s);
    alpha_score = password_alpha(s);
    num_score = password_num(s);
    signal_score = password_signal(s);
    rew = reward(s);
    int sum = size_score + alpha_score + num_score + signal_score + rew;
    if (sum >= 90) {
        printf("VERY_SECURE\n");
    } else if (sum >= 80) {
        printf("SECURE\n");
    } else if (sum >= 70) {
        printf("VERY_STRONG\n");
    } else if (sum >= 60) {
        printf("STRONG\n");
    } else if (sum >= 50) {
        printf("AVERAGE\n");
    } else if (sum >= 25) {
        printf("WEAK\n");
    } else {
        printf("VERY_WEAK\n");
    }
    return 0;
}

使用count函数计算密码中字母、数字、符号出现的次数;在计算奖励分数的时候要记得把“难”的条件放在前面。

全部评论

相关推荐

牛马人的牛马人生:一开始看成了网吧
点赞 评论 收藏
分享
2025-12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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