题目:密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度: 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;
}