解题思路:
用指针数组保存每个密码的首地址,遍历每个密码的每个字符,用flag数组标志每种密码类型,1表示有该种密码,0表示没有
注意事项:
指针数组注意分配足够大的空间,不然会出段错误
参考代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int flag[4]={0};
int count()
{
int k,n=0;
for(k=0;k<4;k++)
if(flag[k]==1)
n++;
return n;
}
int main(int argc,char* argv[])
{
int n,i,j,t=0,k;
scanf("%d",&n);
char* str[10]={0};
char a[500]={0};
for(i=0;i<n;i++)
{
str[i]=a+t;
scanf("%s",str[i]);
t=t+50;
}
for(i=0;i<n;i++) //遍历每一组密码
{
if(strlen(str[i])<8 && strlen(str[i])>16) //(1).密码长度大于等于8,且不要超过16。
printf("NO\n");
else
{
memset(flag,0,16);
for(j=0;j<strlen(str[i]);j++) //遍历一组密码每个字符,“字符类别”中四组中的至少三组。
{
if(*(str[i]+j)>='A' && *(str[i]+j)<='Z')
flag[0]=1;
if(*(str[i]+j)>='a' && *(str[i]+j)<='z')
flag[1]=1;
if(*(str[i]+j)>='0' && *(str[i]+j)<='9')
flag[2]=1;
if(*(str[i]+j)=='~' ||*(str[i]+j)=='!'|| *(str[i]+j)=='@'|| *(str[i]+j)=='#'|| *(str[i]+j)=='$'|| *(str[i]+j)=='%'|| *(str[i]+j)=='^')
flag[3]=1;
}
if(count()>=3)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:569 |
C二级辅导-进制转换 (C语言代码)浏览:657 |
C语言程序设计教程(第三版)课后习题8.9 (Java代码)浏览:1413 |
【出圈】 (C语言代码)浏览:590 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:633 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:723 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:913 |
排序算法(选择,插入,冒泡)浏览:876 |