C检测安全密码网上流传一句话:"常在网上飘啊,哪能不挨刀啊~".其实要想能安安心心地上网其实也不难,学点安全知识就可以.首先,我们就要设置一个安全的密码.那什么样的密码才叫安全的
网上流传一句话:"常在网上飘啊,哪能不挨刀啊~".其实要想能安安心心地上网其实也不难,学点安全知识就可以.
首先,我们就要设置一个安全的密码.那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16.
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组.
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码.
Input
输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符.
Output
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO.
Sample Input
3
a1b2c3d4
Linle@ACM
^~^@^@!%
Sample Output
NO
YES
NO
我的代码在自己电脑上测试能顺利通过,为什么就是没法AC
#include
#include
int main()
{
int a,i,j;
char s[51];
scanf("%d",&a);
for(i=0;i=8&&strlen(s)
switch(1)
{
case 1:if(s[j]>='a'&&s[j]<='z') flag[0]=1;
case 2:if(s[j]>='A'&&s[j]<='Z') flag[1]=1;
case 3:if(s[j]>='0'&&s[j]<='9') flag[2]=1;
case 4:if(s[j]=='~'||s[j]=='!'||s[j]=='@'||s[j]=='#'||s[j]=='$'||s[j]=='%'||s[j]=='^') flag[3]=1;
}
这个写法真奇葩 不过原则上来说 虽然看着别扭 但是这部分还真没问题
你这个代码不能AC的原因在于getchar的位置
在for(i=0;i<a;i++)开头 你调用了一个getchar
想必是要用它略去输入a时候的回车 这个想法是正确的
可是接下来循环中用的是gets 这个函数可不会剩下个回车给你
再getchar就把下一个输入的第一个字符给略去了
所以在多组输入下 就可能出错了
比如
1asfasdfD这个输入 如果不放在第一个 就会输出NO 但实际上它是YES
再如sdfVX~11 如sdf~sdJSSUUd12456
都会输出错误
修改方式
把getchar移到for上面就可以了
你试试吧
修改后代码 switch那段我就不改了
#include#include
int main()
{
int a,i,j;
char s[51];
scanf("%d",&a);
getchar();//move to here
for(i=0;i {
gets(s);
if(strlen(s)>=8&&strlen(s)<=16)
{
int flag[4]={0,0,0,0};
for(j=0;j
switch(1)
{
case 1:if(s[j]>='a'&&s[j]<='z') flag[0]=1;
case 2:if(s[j]>='A'&&s[j]<='Z') flag[1]=1;
case 3:if(s[j]>='0'&&s[j]<='9') flag[2]=1;
case 4:if(s[j]=='~'||s[j]=='!'||s[j]=='@'||s[j]=='#'||s[j]=='$'||s[j]=='%'||s[j]=='^') flag[3]=1;
}
}
if(flag[0]+flag[1]+flag[3]+flag[2]>=3)
printf("YES\n");
else
printf("NO\n");
}
else printf("NO\n");
}
}
求物理问题排球场总长18m,设网高调2m,运动员站在离网3m线上正对网前跳起将球水平击出,不计空气 2020-04-13 …
脑海里的知识网络是怎样形成的?是多看几遍书才形成的吗?还有如何进行总结归纳?举例说明高一二需要打好 2020-05-16 …
下面的叙述中正确的是______。A.Modem必须通过电话线才能与其他设备通信B.Modem必须通 2020-05-23 …
你是网络管理员,你的网络上配置了2台WINS服务器,并且设置了数据库的复制,但是你发现,由于公司的网 2020-05-31 …
如图所示,排球场总长为18m,设网的高度为2m,运动员站在离网3m远的线上正对网前竖直跳起把球垂直 2020-06-18 …
一位网民在网上光顾某网店,经过一番浏览后,对该店铺中的三种商品有购买意向.已知该网民购买种商品的概 2020-06-18 …
李老师准备网上在线学习,现有甲、乙两家网站供李老师选择,已知甲网站的收费方式是:月使用费7元,包时 2020-06-27 …
在互联网时代,网校培训已经成为青少年学习的一种趋势,假设育才网校的套题每日的销售量(单位:千套)与 2020-07-03 …
已知某网络设定的网络号为172.168.0.0,欲在此网络下划分8个子网请问:(1)需要多少位子网 2020-07-18 …
一位网民在网上光顾某网店,经过一番浏览后,对该店铺中的A,B,C三种商品有购买意向.已知该网民购买A 2020-12-15 …