题解 | #密码安全等级#
#include<stdio.h>
#include<string.h>
#define VERY_WEAK 0
#define WEAK 1
#define AVERAGE 2
#define STRONG 3
#define VERY_STRONG 4
#define SECURE 5
#define VERY_SECURE 6
char *data_out[]={"VERY_WEAK","WEAK","AVERAGE","STRONG", \
"VERY_STRONG","SECURE","VERY_SECURE"};
/*
* 0位:0 没有字母, 1 大写/小写 2 大小写
*.1位:小写
*.2位:大写
*.3位:符号个数
*.4位:数字个数
*.9 奖励
*/
#define true (10 >= 1)
#define symbols 3
#define num 4
#define capital_ch 2
#define small_ch 1
#define mark_ch 0
#pragma pack(1);
typedef struct node{
int data_scoer_mark[10];
char *ch_in;
int length;
int score_value;
char *ch_out_score;
} typenode;
#pragma pack();
// 输出字符出数组
void ch_test(typenode *data){
// 这里题目没有设置非法字符
char * ch = data->ch_in;
int i = 0;
while(i < data->length){
if(ch[i] >= '0' && ch[i] <= '9'){
data->data_scoer_mark[num]++;
}
else if(ch[i] >= 'a' && ch[i] <= 'z'){
data->data_scoer_mark[small_ch]++;
}
else if(ch[i] >= 'A' && ch[i] <= 'Z'){
data->data_scoer_mark[capital_ch]++;
}
else {
data->data_scoer_mark[symbols]++;
}
i++;
}
// 字母处理
if(data->data_scoer_mark[small_ch] > 0) data->data_scoer_mark[0]++;
if(data->data_scoer_mark[capital_ch] > 0) data->data_scoer_mark[0]++;
if(data->data_scoer_mark[mark_ch] == 2) data->score_value += 20;
else if(data->data_scoer_mark[mark_ch] = 1) data->score_value += 10;
// 数字处理
if(data->data_scoer_mark[num] == 1) data->score_value += 10;
else if(data->data_scoer_mark[num] >= 2) data->score_value += 20;
// 符号处理
if(data->data_scoer_mark[symbols] == 1) data->score_value += 10;
else if(data->data_scoer_mark[symbols] >= 2) data->score_value += 25;
}
void length_test(typenode *data){
data->length = strlen(data->ch_in);
if(data->length >= 8) data->score_value += 25;
else if(data->length >4) data->score_value += 10;
else data->score_value += 5;
}
void award(typenode *data){
if(data->data_scoer_mark[0] > 0 && data->data_scoer_mark[num] > 0){
if(data->data_scoer_mark[symbols] > 0){
if(data->data_scoer_mark[small_ch] > 0 && \
data->data_scoer_mark[capital_ch] > 0) data->score_value += 5;
else data->score_value += 3;
}
else data->score_value += 2;
}
}
// 绑定输出字符串
void out_chtest(typenode *data){
int score = data->score_value;
if(score >= 90) data->ch_out_score=data_out[VERY_SECURE];
else if(score >= 80) data->ch_out_score=data_out[SECURE];
else if(score >= 70) data->ch_out_score=data_out[VERY_STRONG];
else if(score >= 60) data->ch_out_score=data_out[STRONG];
else if(score >= 50) data->ch_out_score=data_out[AVERAGE];
else if(score >= 25) data->ch_out_score=data_out[WEAK];
else data->ch_out_score=data_out[VERY_WEAK];
/*
switch(true){
case (score >= 90): data->ch_out_score=data_out[VERY_SECURE];break;
case (score >= 80): data->ch_out_score=data_out[SECURE];break;
case (score >= 70): data->ch_out_score=data_out[VERY_STRONG];break;
case (score >= 60): data->ch_out_score=data_out[STRONG];break;
case (score >= 50): data->ch_out_score=data_out[AVERAGE];break;
case (score >= 25): data->ch_out_score=data_out[WEAK];break;
default:data->ch_out_score=data_out[VERY_WEAK];break;
}
*/
}
// data结构体处理
void data_handle(typenode *data){
char *ch = data->ch_in;
// 长度判断
length_test(data);
// 对字符进行处理
ch_test(data);
// 计算获奖
award(data);
// 绑定输出字符串
out_chtest(data);
}
int main()
{
typenode *data;
data = (typenode *)malloc(sizeof(typenode));
char ch_in[2000];
while(EOF != scanf("%s", ch_in)){
// 数据清零
memset(data, 0, sizeof(typenode));
// 将密码与data中的ch_in 绑定
data->ch_in = ch_in;
// 调用处理函数
//使用处理函数对数据进行处理,以及对data进行填充
data_handle(data);
// 输出结果
printf("%s\n", data->ch_out_score, data->score_value);
}
return 0;
}
#include<string.h>
#define VERY_WEAK 0
#define WEAK 1
#define AVERAGE 2
#define STRONG 3
#define VERY_STRONG 4
#define SECURE 5
#define VERY_SECURE 6
char *data_out[]={"VERY_WEAK","WEAK","AVERAGE","STRONG", \
"VERY_STRONG","SECURE","VERY_SECURE"};
/*
* 0位:0 没有字母, 1 大写/小写 2 大小写
*.1位:小写
*.2位:大写
*.3位:符号个数
*.4位:数字个数
*.9 奖励
*/
#define true (10 >= 1)
#define symbols 3
#define num 4
#define capital_ch 2
#define small_ch 1
#define mark_ch 0
#pragma pack(1);
typedef struct node{
int data_scoer_mark[10];
char *ch_in;
int length;
int score_value;
char *ch_out_score;
} typenode;
#pragma pack();
// 输出字符出数组
void ch_test(typenode *data){
// 这里题目没有设置非法字符
char * ch = data->ch_in;
int i = 0;
while(i < data->length){
if(ch[i] >= '0' && ch[i] <= '9'){
data->data_scoer_mark[num]++;
}
else if(ch[i] >= 'a' && ch[i] <= 'z'){
data->data_scoer_mark[small_ch]++;
}
else if(ch[i] >= 'A' && ch[i] <= 'Z'){
data->data_scoer_mark[capital_ch]++;
}
else {
data->data_scoer_mark[symbols]++;
}
i++;
}
// 字母处理
if(data->data_scoer_mark[small_ch] > 0) data->data_scoer_mark[0]++;
if(data->data_scoer_mark[capital_ch] > 0) data->data_scoer_mark[0]++;
if(data->data_scoer_mark[mark_ch] == 2) data->score_value += 20;
else if(data->data_scoer_mark[mark_ch] = 1) data->score_value += 10;
// 数字处理
if(data->data_scoer_mark[num] == 1) data->score_value += 10;
else if(data->data_scoer_mark[num] >= 2) data->score_value += 20;
// 符号处理
if(data->data_scoer_mark[symbols] == 1) data->score_value += 10;
else if(data->data_scoer_mark[symbols] >= 2) data->score_value += 25;
}
void length_test(typenode *data){
data->length = strlen(data->ch_in);
if(data->length >= 8) data->score_value += 25;
else if(data->length >4) data->score_value += 10;
else data->score_value += 5;
}
void award(typenode *data){
if(data->data_scoer_mark[0] > 0 && data->data_scoer_mark[num] > 0){
if(data->data_scoer_mark[symbols] > 0){
if(data->data_scoer_mark[small_ch] > 0 && \
data->data_scoer_mark[capital_ch] > 0) data->score_value += 5;
else data->score_value += 3;
}
else data->score_value += 2;
}
}
// 绑定输出字符串
void out_chtest(typenode *data){
int score = data->score_value;
if(score >= 90) data->ch_out_score=data_out[VERY_SECURE];
else if(score >= 80) data->ch_out_score=data_out[SECURE];
else if(score >= 70) data->ch_out_score=data_out[VERY_STRONG];
else if(score >= 60) data->ch_out_score=data_out[STRONG];
else if(score >= 50) data->ch_out_score=data_out[AVERAGE];
else if(score >= 25) data->ch_out_score=data_out[WEAK];
else data->ch_out_score=data_out[VERY_WEAK];
/*
switch(true){
case (score >= 90): data->ch_out_score=data_out[VERY_SECURE];break;
case (score >= 80): data->ch_out_score=data_out[SECURE];break;
case (score >= 70): data->ch_out_score=data_out[VERY_STRONG];break;
case (score >= 60): data->ch_out_score=data_out[STRONG];break;
case (score >= 50): data->ch_out_score=data_out[AVERAGE];break;
case (score >= 25): data->ch_out_score=data_out[WEAK];break;
default:data->ch_out_score=data_out[VERY_WEAK];break;
}
*/
}
// data结构体处理
void data_handle(typenode *data){
char *ch = data->ch_in;
// 长度判断
length_test(data);
// 对字符进行处理
ch_test(data);
// 计算获奖
award(data);
// 绑定输出字符串
out_chtest(data);
}
int main()
{
typenode *data;
data = (typenode *)malloc(sizeof(typenode));
char ch_in[2000];
while(EOF != scanf("%s", ch_in)){
// 数据清零
memset(data, 0, sizeof(typenode));
// 将密码与data中的ch_in 绑定
data->ch_in = ch_in;
// 调用处理函数
//使用处理函数对数据进行处理,以及对data进行填充
data_handle(data);
// 输出结果
printf("%s\n", data->ch_out_score, data->score_value);
}
return 0;
}