C++练习题——密码安全等级划分

    xiaoxiao2022-07-12  200

    题目:密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

    一、密码长度: 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符 二、字母: 0 分: 没有字母 10 分: 全都是小(大)写字母 20 分: 大小写混合字母 三、数字: 0 分: 没有数字 10 分: 1 个数字 20 分: 大于1 个数字 四、符号: 0 分: 没有符号 10 分: 1 个符号 25 分: 大于1 个符号 五、奖励: 2 分: 字母和数字 3 分: 字母、数字和符号 5 分: 大小写字母、数字和符号 最后的评分标准:

    = 90: 非常安全 = 80: 安全(Secure) = 70: 非常强 = 60: 强(Strong) = 50: 一般(Average) = 25: 弱(Weak) = 0: 非常弱 对应输出为: VERY_SECURE, WEAK, AVERAGE, STRONG, VERY_STRONG, SECURE, VERY_WEAK

    小技巧:

    isalpha 判断字母 isupper 判断大写 islower 判断小写 isdigital 判断数字 isalnum 判断字母和数字(在这道题里 除了字母和数字就是符号 可以巧用这个函数)

    收获

    string.size()返回一个size_t类型的值,所以for循环遍历时也要创建 size_t 类型的变量 i

    题解

    #include<iostream> #include<string> using namespace std; //长度得分 int length(string s){ size_t len = s.size(); if (len <= 4){ return 5; } else if (len >= 5 && len <= 7){ return 10; } return 25; } //字母得分(用了isalpha等三个函数) int letter(string s){ size_t alpha = 0; size_t big = 0; size_t small = 0; size_t i = 0; for (i = 0; i < s.size(); i++){ if (isalpha(s[i])){ alpha++; } if (isupper(s[i])){ big++; } if (islower(s[i])){ small++; } } if (alpha == 0){ return 0; } if (big == s.size() || small == s.size()){ return 10; } if (big > 0 && small > 0){ return 20; } return 0; } //数字得分(用了isdigit函数) int number(string s){ int count = 0; size_t i = 0; for (i = 0; i < s.size(); i++){ if (isdigit(s[i])){ count++; } } if (count == 0){ return 0; } if (count == 1){ return 10; } if (count > 1){ return 20; } return 0; } //符号得分(isalnum可以判断是否是字母或数字 除此之外就是字符) int sign(string s){ int count = 0; size_t i = 0; for (i = 0; i < s.size(); i++){ if (!isalnum(s[i])){ count++; } } if (count == 0){ return 0; } if (count == 1){ return 10; } if (count > 1){ return 25; } return 0; } //奖励得分 int reward(string s){ int count = 0; if (letter(s) == 20 && number(s) > 0 && sign(s) > 0){ return 5; } else if (letter(s) > 0 && number(s) > 0 && sign(s) > 0){ return 3; } else if (letter(s) > 0 && number(s) > 0){ return 2; } return 0; } void GetPwdSecurityLevel(string pPasswordStr){ int ret1 = length(pPasswordStr); int ret2 = letter(pPasswordStr); int ret3 = number(pPasswordStr); int ret4 = sign(pPasswordStr); int ret5 = reward(pPasswordStr); int ret = ret1 + ret2 + ret3 + ret4 + ret5; if (ret >= 90){ cout << "VERY_SECURE" << endl; } else if (ret >= 80){ cout << "SECURE" << endl; } else if (ret >= 70){ cout << "VERY_STRONG" << endl; } else if (ret >= 60){ cout << "STRONG" << endl; } else if (ret >= 50){ cout << "AVERAGE" << endl; } else if (ret >= 25){ cout << "WEAK" << endl; } else if (ret >= 0){ cout << "VERY_WEAK" << endl; } return; } int main(){ string pPasswordStr; getline(cin, pPasswordStr); GetPwdSecurityLevel(pPasswordStr); system("pause"); return 0; }
    最新回复(0)