密码——HDU2043

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tgdwcj/article/details/82218060

判断它是不是一个安全的密码



网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组

这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任务就是判断它是不是一个安全的密码。


问题详见密码

详细过程见code

#include <iostream>
using namespace std;
#include <string>
#include <cctype>   //在c语言中为ctype  c++则为cctype
/*
isupper()	如果参数是大写字母,该函数返回true
islower()	如果参数是小写字母,该函数返回true
isdigit()	如果参数是数字(0~9),该函数返回true
*/


int f[4]={ 0 };       //初始化一位数组全为0 主要用来存放满足几个条件
//由题意可知 需满足三个条件(也就是三个函数)才能输出YES
                    
int isspec(char c)  //判别输入字符串的每一个字符是否为特殊字符
{
	if(c=='~'||c=='!'||c=='@'||c=='#'||c=='$'||c=='%'||c=='^')
		return 1;
	else
		return 0;
}
int s1(string a)
{
	int n=a.length();//n为输入字符串的长度
					 //以下须对该字符串进行三次条件的判断

	for(int i=0;i<n;++i)
	{
		if(isupper(a[i]))//cctype库本身的函数  判断是否为大写字母
		{
			f[0]=1;
			break;
		}
	}
	for(int j=0;j<n;j++)
	{
		if(islower(a[j]))//小写字母
		{
			f[1]=1;
			break;
		}
	}
	for(int k=0;k<n;k++)
	{
		if(isdigit(a[k]))//数字
		{
			f[2]=1;
			break;
		}
	}
	for(int m=0;m<n;m++)
	{
		if(isspec(a[m]))//特殊字符没有可调用函数,只能自己写
		{
			f[3]=1;
			break;
		}
	}
	int p=(f[0]+f[1]+f[2]+f[3]);

	return p;

}
int main()
{
	int n;
	cin>>n;    //实现输入一行数M,接下来有M行,每行一个密码
	getchar(); //getchar()函数从STDIN(标准输入)获取并返回下一个字符,如果到达文件尾返回EOF. 
	
	while(n--)
	{
		string a;
		cin>>a;
		if(a.length ()<8||a.length()>16) //判断是否密码长度是否小于16,大于8;
		{
			cout<<"NO"<<endl;
			continue;
		}
		int count;
		count =s1(a);

		if(count>=3)
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
		return 0;
}

 

倘若不调用cctype的函数时,也可以自己写出实现方法

int spec(char c)      //判断是否为特殊字符
{
    if(c=='~'||c=='!'||c=='@'||c=='#'||c=='$'||c=='%'||c=='^')
        return 1;
    else
        return 0;
}

int supper(char c) //判断是否为大写字母
{
    if(c-'A'>=0&&c-'Z'<=0)
        return 1;
    else
        return 0;
}
int lower(char c) //判断是否为小写字母
{
    if(c-'a'>=0&&c-'z'<=0)
        return 1;
    else
        return 0;
}
int digit(char c) //判断是否为数字
{
    if(c-'0'>=0&&c-'9'<=0)
        return 1;
    else
        return 0;
}
 

猜你喜欢

转载自blog.csdn.net/tgdwcj/article/details/82218060
今日推荐