题解 | #密码强度等级#

密码强度等级

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

感觉最坑的还是大小写字母那一块(加10分那一条),容易错误解读,是已出现的字母是否是全为大/小写,而不是整个密码串全为大/小写字母!!!!!

#include <iostream>
using namespace std;
int main(){
    string code;   //密码
    int score;   //密码强度得分
    string grade;   //密码强度对应的等级
    while(cin>>code){
        score = 0;
        //1、长度得分
        int len = code.length();    //密码长度
        if(len <= 4) score +=5;
        else  if(len >=5 && len <= 7) score +=10;
        else  if(len >=8 ) score +=25;

        //2、字母得分
        bool letter_flag = false;     //字母有无
        bool low_high_letter_flag = false;    //是否同时有大小写字母
        int low_letter_cnt = 0;     //密码小写字母数量
        int high_letter_cnt = 0;     //密码大写字母数量

        //3、数字得分
        bool number_flag = false;    //数字有无
        int number_cnt = 0;    //密码数字数量

        //4、符号得分
        bool sign_flag = false;    //符号有无
        int sign_cnt = 0;     //符号数量

        //逐个字符判断
        for(int i = 0; i < len; i++){
            //字母判断
            if(code[i] >= 'a' && code[i] <= 'z'){
                low_letter_cnt ++;
            }else if(code[i] >= 'A' && code[i] <= 'Z'){
                high_letter_cnt ++;
            }
            //数字判断
            else if(code[i] >= '0' && code[i] <= '9'){
                number_cnt ++;
            }
            //符号判断
             else if(code[i] >= '!' && code[i] <= '/' || code[i] >= ':' && code[i] <= '@'
              || code[i] >= '[' && code[i] <= '`' || code[i] >= '{' && code[i] <= '~'){
                sign_cnt ++;
            }
        }
        //循环结束以后
        //字母判断
        if(low_letter_cnt || high_letter_cnt) letter_flag = true;    //说明有字母
        //下面这行感觉最容易让人产生误解
        if(low_letter_cnt && !high_letter_cnt || high_letter_cnt && !low_letter_cnt) score += 10;
        else if(low_letter_cnt && high_letter_cnt){
            score += 20;
            low_high_letter_flag = true;
        } 
        //数字判断 
        if(number_cnt == 1) {
            score += 10;
            number_flag = true;
        }else if(number_cnt > 1){
            score += 20;
            number_flag = true;
        } 

        //符号判断
        if(sign_cnt == 1) {
            score += 10;
            sign_flag = true;
        }else if(sign_cnt > 1){
            score += 25;
            sign_flag = true;
        } 

        //5、奖励得分
        if(low_high_letter_flag && number_flag && sign_flag) score += 5;
        else if(letter_flag && number_flag && sign_flag ) score += 3;
        else if(letter_flag && number_flag) score += 2;

        //输出对应等级
        if(score >= 90) grade = "VERY_SECURE";
        else if(score >= 80) grade = "SECURE";
        else if(score >= 70) grade = "VERY_STRONG";
        else if(score >= 60) grade = "STRONG";
        else if(score >= 50) grade = "AVERAGE";
        else if(score >= 25) grade = "WEAK";
        else if(score >= 0) grade = "VERY_WEAK";
        cout << grade << endl;
    }
    return 0;
}




全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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