问题描述
网上流传一句话:“常在网上飘啊,哪能不挨刀啊~”。其实要想能安安心心地上网其实也不 难,学点安全知识就可以。 首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安 全的密码至少应该满足下面两个条件: (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 <iostream>
#include <cctype>
#include <algorithm>
using namespace std;
int main(){
int m;
char c;
int a[6];
cin>>m;
while(m--){
fill(a,a+6,0); //初始化数组
getchar();
while((c=getchar())!='\n'){
a[5]++; // 字符的个数
if(isupper(c)){
a[0]++; //大写字母的个数
}
else if(islower(c)){
a[1]++; // 小写字母的个数
}
else if(isdigit(c)){
a[2]++; // 数字的个数
}
else
{
a[3]++; // 其他字符 的个数
}
}
if(a[0]) a[4]++;
if(a[1]) a[4]++;
if(a[2]) a[4]++;
if(a[3]) a[4]++;
if(a[4]>2 && a[5]<17 && a[5]>7){ //密码长度大于等于 8,且不要超过 16。 密码中的字符应该来自下面“字符类别”中四组中的至少三组
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}