题解 | 密码强度等级
密码强度等级
https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361
//1. 输入一个字符串
//2. 定义一个得分函数,分数相加
//3. 输出,按输出的标准来
#include <bits/stdc++.h>
using namespace std;
bool ispunctt(char a){
if(a>= 0x21 && a<=0x2F) return true;
if(a>= 0x3A && a<=0x40) return true;
if(a>= 0x5B && a<=0x60) return true;
if(a>= 0x7B && a<=0x7E) return true;
return false;
}
int defen1(string s){
int m = 0;
// 1. 密码长度这一块儿
if(s.size()<=4){
m = 5;
}
else if(s.size()>=5 &&s.size()<=7){
m = 10;
}
else{
m = 25;
}
return m;
}
int defen2(string s){
int m = 0;
bool a = false;
bool A = false;
for(int i = 0;i<s.size();i++){
if(isupper(s[i])){
A = true;
}
else if(islower(s[i])){
a = true;
}
}
if(a== true && A == true){
m = 20;
}
else if( a== false && A == false){
m = 0;
}
else{
m = 10;
}
return m;
}
// 数字那一块儿
int defen3(string s){
int m = 0;
int t = 0;
for(int i = 0;i<s.size();i++){
if(s[i] >='0' &&s[i] <= '9'){
m++;
}
}
if(m == 0){
t = 0;
}
else if(m == 1){
t = 10;
}
else if(m>1){
t = 20;
}
return t;
}
// 符号那一块儿
int defen4(string s){
int m = 0;
int t = 0;
for(int i = 0;i<s.size();i++){
if(ispunctt(s[i])){
m++;
}
}
if(m == 0){
t = 0;
}else if(m == 1){
t = 10;
}else if(m>1){
t = 25;
}
return t;
}
// 奖励
int defen5(string m){
int t = 0;
bool daxie = false;
bool xiaoxie = false;
bool a = false;
bool b = false;
bool c = false;
int mm = 0;
for(int i = 0;i<m.size();i++){
if(isupper(m[i])){
daxie = true;
a = true;
}
else if(islower(m[i])){
xiaoxie = true;
a = true;
}
else if(isdigit(m[i])){
b = true;
}
else if(ispunctt(m[i])){
c = true;
}
}
if(daxie == true && xiaoxie == true && b == true && c == true){
t = 5;
}else if(a == true && b == true && c == true){
t = 3;
}else if(a == true && b == true){
t = 2;
}
else{
t = 0;
}
return t;
}
int main(){
string s;
getline(cin,s);
int m = defen1(s) + defen2(s) + defen3(s) + defen4(s) + defen5(s);
if(m >= 90){
cout << "VERY_SECURE"<< endl;
}
else if(m>= 80){
cout << "SECURE" << endl;
}
else if(m>= 70){
cout << "VERY_STRONG"<<endl;
}
else if(m >= 60){
cout << "STRONG"<<endl;
}
else if(m >= 50){
cout << "AVERAGE" << endl;
}
else if(m>= 25){
cout <<"WEAK" << endl;
}
else{
cout << "VERY_WEAK" << endl;
}
return 0;
}
