小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:
-
密码只能由大写字母,小写字母,数字构成;
-
密码不能以数字开头;
-
密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
-
密码长度至少为8
现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。
这道题只需要将字符串从头到尾的每种字符(大写字符,小写字符,数字,其他字符)分别统计出来后。然后逐个判
断是否符合条件即可。对每个密码进行条件的判断包含有:
长度不小于8
不能以数字开头
只能包含字母和数字
大小写和字符必须具备两种以上
代码如下
#include<stdio.h>
#include<string.h>
int main()
{
int n = 0;
while(scanf("%d",&n)!=EOF)//输入不为空
{
for(int i = 0; i < n; i++)
{
char pwd[101] = {0};
scanf("%s",pwd);
int lower = 0,higher = 0,digit = 0,other = 0;
if(pwd[0] >= '0' && pwd[0] <= '9')
{
printf("NO\n");
continue;
}//密码不能以数字开头
if(strlen(pwd) < 8)
{
printf("NO\n");
continue;
}//密码长度至少为8
for(int i = 0; pwd[i] != '\0'; i++)
{
if(pwd[i] >= '0' && pwd[i] <= '9')
digit++;//数字
else if(pwd[i] >= 'a' && pwd[i] <= 'z')
lower++;//小写字母
else if(pwd[i] >= 'A' && pwd[i] <= 'Z')
higher++;//大写字母
else
other++;
}
if(other != 0)
{
printf("NO\n");
continue;
}// 密码只能由大写字母,小写字母,数字构成
//大写,小写,数字,必须具有两种以上,而比较运算真则1,假则0
if((lower > 0) + (higher > 0) + (digit > 0) < 2)
{
printf("NO\n");
continue;
}//密码只有1种字符
printf("YES\n");
}
}
return 0;
}