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");
}
}
英语翻译(中文是想要表达的意思,翻译不必和中文完全一样)中文部分:首先,我很俗的想要用我们三个人的 2020-05-16 …
李长春指出,各级党组织要广泛组织学习“双百”人物活动,努力在全社会掀起学习英雄模范、崇尚英雄模范的 2020-05-17 …
读书的要决全在于会意对此你有什么看法 2020-06-23 …
请根据上下文,在材料的空格处补写恰当的内容。要求:语音连贯,表达简明,每处不超过12个字。文学形象 2020-06-27 …
怎样理解读书的要诀,全在于会意 2020-07-07 …
请根据上下文,在材料的空格处补写恰当的内容。要求:语音连贯,表达简明,每处不超过15个字。文学形象 2020-07-22 …
33.我国人民民主专政实质上是无产阶级专政,主要表现在它们的。A.领导力量一样B.阶级基础一样C.实 2020-11-01 …
帮我写两份不同的高中生社会实践所在的单位意见(就是帮助社区扫地之类的,然后实践单位给的意见)两份各是 2020-11-21 …
交通安全在我心中,要遵守交通规则,过马路要走人行横道.(1)请你用彩色笔在下面人行横道区域内画人行横 2020-11-25 …
广州市在创建全国文明城市活动中,要求全体动员,全面动员。某小区张贴了这样一条标语:一言一行都体现你的 2020-11-27 …