一、题目:
密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
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、SECURE,VERY_STRONG,STRONG,AVERAGE,WEAK,VERY_WEAK,
请根据输入的密码字符串,进行安全评定。
注:
字母:a-z, A-Z、数字:-9、符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)、!"#$%&'()*+,-./ (ASCII码:x21~0x2F)、:;<=>?@ (ASCII<=><=><=><=><=>码:x3A~0x40)、[\]^_`(ASCII码:x5B~0x60)、{|}~ (ASCII码:x7B~0x7E)
输入描述:
本题含有多组输入样例。
每组样例输入一个string的密码
输出描述:
每组样例输出密码等级
二、输入输出示例:
三、代码:
#include<iostream>
using namespace std;
#include<string>
int main()
{string s;while(cin>>s){int res = 0;//密码长度if(s.size() <= 4){res += 5;}else if(s.size() >= 5 && s.size() <= 7){res += 10;}else{res += 25;}//字母和数字int flag1,flag2; //flag1对应大写字母 flag2对应小写字母flag1 = flag2 = 0;int flag3 = 0; //flag3表示数字个数int flag4 = 0; //flag4表示符号个数for(int i=0;i<s.size();i++){if(s[i] >= 'A' && s[i] <= 'Z'){flag1 = 1;}else if(s[i] >= 'a' && s[i] <= 'z'){flag2 = 1;}else if(s[i] >= '0' && s[i] <= '9'){flag3++;}else{flag4++;}}//字母if(flag1 + flag2 == 1){res += 10;}else if(flag1 +flag2 == 2){res += 20;}//数字if(flag3 == 1){res += 10;}else if(flag3 > 1){res += 20;}//符号if(flag4 == 1){res += 10;}else if(flag4 > 1){res += 25;}//奖励if(flag1 + flag2 == 1 && flag3 != 0){res += 2;}else if(flag1 + flag2 == 1 && flag3 != 0 && flag4 != 0){res += 3;}else if(flag1 + flag2 == 2 && flag3 != 0 && flag4 != 0){res += 5;}//评分if(res >= 90){cout<<"VERY_SECURE"<<endl;}else if(res >= 80){cout<<"SECURE"<<endl;}else if(res >= 70){cout<<"VERY_STRONG"<<endl;}else if(res >= 60){cout<<"STRONG"<<endl;}else if(res >= 50){cout<<"AVERAGE"<<endl;}else if(res >= 25){cout<<"WEAK"<<endl;}else{cout<<"VERY_WEAK"<<endl;}}system("pause");return 0;
}