这道题目并不算难,实现时可能会写出一些bug,需要耐心去调试。有两种方法,首先这些题目要求可以频繁使用字符串的库函数,这里不介绍这些库函数,我的方法是直接比较阿斯克码值的大小进行删选,频繁使用if语句。代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char arr[101] = { 0 };
int n = 0;
scanf("%d", &n); //输入要检查的密码的个数
getchar();
for (int i = 0; i < n; i++)
{
int a = 0;
int b = 0;
int c = 0;
int flag = 0;
scanf("%s", arr);
getchar(); //吸收回车键
for (int j = 0; j < strlen(arr); j++)
{
if (strlen(arr) < 8) //4. 密码长度至少为8
{
flag = 1;
printf("NO\n");
break;
}
if ((arr[0] > '0') && (arr[0] < '9')) //2.密码不能以数字开头;
{
flag = 1;
printf("NO\n");
break;
}
if (!(((arr[j] >= '0') && (arr[j] <= '9')) || ((arr[j] >= 'A') && (arr[j] <= 'Z')) || ((arr[j] >= 'a') && (arr[j] <= 'z')))) //1.密码只能由大写字母,小写字母,数字构成;
{
flag = 1;
printf("NO\n");
break;
}
if ((arr[j] > '0') && (arr[j] < '9'))
{
a = 1;
}
if ((arr[j] > 'A') && (arr[j] < 'Z'))
{
b = 1;
}
if ((arr[j] > 'a') && (arr[j] < 'z'))
{
c = 1;
}
if ((j == strlen(arr) - 1) && (a + b + c < 2)) //3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
{
flag = 1;
printf("NO\n");
break;
}
}
if (flag == 0)
{
printf("YES\n");
}
}
system("pause");
return 0;
}