网上流传一句话:“常在网上飘啊,哪能不挨刀啊~”。其实要想能安安心心地上网其实也不难,学点安全知识就可以。首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:(1).密码长度大于等于8,且不要超过16。(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。这四个字符类别分别为:
1.大写字母:A,B,C…Z
2.小写字母:a,b,c…z
3.数字:0,1,2…9;
4.特殊符号:~,!,@,#,$,%,^;给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入:输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。输出:对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
输入样例:
3
a1b2c3d4
Linle@ACM
~@^@!%
输出样例:
NO
YES
NO
基本思路
主要处理的是判断有多少种字符,这里是分别设置四个标识符来判断是否有这种对应的字符
#include<stdio.h>
#include<string.h>
#define N 50
int check1(char a[]);
int main()
{
int M;
char a[N];
int b[N]={
0},count=0,num;
int i,j,k;
scanf("%d\n",&M);
for(i=0;i<M;i++)
{
gets(a);
num=strlen(a); //计算字符串的长度,若长度小于8则不安全
if(num<8)
b[i]=1;
else if(check1(a)<3) //字符串中不到3种字符,那么不安全记为1;安全记为0;
b[i]=1;
}
for(i=0;i<M;i++)
{
if(b[i]==1)
printf("no\n");
else printf("yes\n");
}
}
int check1(char a[])
{
int e,b,c,d;
int count=0;
int i=0;
e=0;b=0;c=0;d=0;
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a'&&a[i]<='z') //若存在该种字符则记为1,这里不为计数,只作为一种标识符
e=1;
if(a[i]>='A'&&a[i]<='Z')
b=1;
if(a[i]>='0'&&a[i]<='9')
c=1;
if(a[i]=='~'||a[i]=='!'||a[i]=='#'||a[i]=='@'||a[i]=='$'||a[i]=='^')
d=1;
}
return e+b+c+d;
}