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

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

一、密码长度:
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;
}

猜你喜欢

转载自blog.csdn.net/qq_42685588/article/details/90483274