某网站规定注册账号时密码必须达到一定强度才可以。他们规定密码长度至少6位,数字、大写字母、小写字母、符号(~!@#$%^&*()[]}{|<>?/.,:”‘;)这四类中至少包含三类才合格。现在请你写一段程序来判断一个密码是否合格。
输入:
第一行为一个整数n(0<n<10),代表测试用例组数,
后边是n行测试用例,每行为一个长度不超过30的字符串
输出:
共n行,与输入的n行测试用例相对应,如果密码合格则输出yes,否则输出no。
#include<stdio.h>
#include<string.h>
int main()
{
int n;
int flag1=0,flag2=0,flag3=0,flag4=0;
scanf("%d",&n);
int i,j;
char a[10][50];
for(i=-1;i<n;i++)
{
gets(a[i]);
}
for(i=0;i<n;i++)
{
if(strlen(a[i])<6)
{
printf("no\n");
continue;
}
for(j=0;j<strlen(a[i]);j++)
{
if(a[i][j]>='0'&&a[i][j]<='9')flag1=1;
if(a[i][j]>='a'&&a[i][j]<='z')flag2=1;
if(a[i][j]>='A'&&a[i][j]<='Z')flag3=1;
if(a[i][j]>=123&&a[i][j]<=126)flag4=1;
if(a[i][j]>=91&&a[i][j]<=94)flag4=1;
if(a[i][j]>=58&&a[i][j]<=60)flag4=1;
if(a[i][j]>=62&&a[i][j]<=64)flag4=1;
if(a[i][j]==46||a[i][j]==44||a[i][j]==47)flag4=1;
if(a[i][j]>=33&&a[i][j]<=42)flag4=1;
}
if((flag1+flag2+flag3+flag4)>2)
{
printf("yes\n");
continue;
}
else
{
printf("no\n");
continue;
}
}
return 0;
//printf("%d %d",strlen(a[0]),strlen(a[1]));
}
希望能指出漏洞