华为OJ-密码强度等级

题目:

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

       一、密码长度:

       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_WEAK,

   WEAK,    

   AVERAGE,    

   STRONG,     

   VERY_STRONG,

   SECURE,     

   VERY_SECURE 

解题思路::这个题目也很简单,但是我的解法没有AC,我的答案能够出来,能够在VC6.0上正常运行。我查找了好久都不知道怎么错的,不过网上有人AC,说明有更好的方法,别切能够适合在线测评。
#include<iostream>
#include<stdio.h>
#include<string>
#include<ctype.h>
using namespace std;
int main()
{
	string str;
	getline(cin,str);
	int sum=0;
	int len=str.length();
	if(len<=4)
		sum+=5;
	else if(len<=7)
		sum+=10;
	else
		sum+=25;
	int i=0;
	int index_xiao=-1;
	int index_da=-1;
	while(str[i])
	{
		if(str[i]>='a'&&str[i]<='z')
		{
			index_xiao=i;
			break;
		}
		i++;
	}
	i=0;
    while(str[i])
	{
		if(str[i]>='A'&&str[i]<='Z')
		{
			index_da=i;
			break;
		}
		i++;
	}
    if(index_xiao<0&&index_da<0)
		sum+=0;
	if((index_xiao>=0&&index_da<0)||(index_xiao<0&&index_da>=0))
		sum+=10;
	if(index_xiao>=0&&index_da>=0)
		sum+=20;
	int count=0;
	i=0;
	while(str[i])
	{
		if(isdigit(str[i]))
			count++;
		i++;
	}
	if(count==0)
		sum+=0;
	if(count==1)
		sum+=10;
	if(count>1)
		sum+=20;
	i=0;
	int count1=0;
	while(str[i])
	{
		if((str[i]>='!'&&str[i]<='/')||(str[i]>=':'&&str[i]<='@')||(str[i]>='['&&str[i]<='`')||(str[i]>='{'&&str[i]<='~'))
			count1++;
		i++;
	}
	if(count1==0)
		sum+=0;
	if(count1==1)
		sum+=10;
    if(count1>1)
		sum+=25;
	if((index_xiao>=0||index_da>=0)&&(count>=1))
		sum+=2;
	if((index_xiao>=0||index_da>=0)&&(count>=1)&&(count1>=1))
		sum+=3;
	if((index_xiao>=0)&&(index_da>=0)&&(count>=1)&&(count1>=1))
		sum+=5;
	if(sum>=90)
		cout<<"VERY_SECURE";
	else if(sum>=80)
		cout<<"SECURE";
	else if(sum>=70)
		cout<<"VERY_STRONG";
	else if(sum>=60)
		cout<<"STRONG";
	else if(sum>=50)
		cout<<"AVERAGE";
	else if(sum>=25)
		cout<<"WEAK";
	else
		cout<<"VERY_WEAK";
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值