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