zz


私信TA

用户名:hlgn

访问量:1533

签 名:

等  级
排  名 15810
经  验 782
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 湖南工程学院
专  业

  自我简介:

解题思路:

    用指针数组保存每个密码的首地址,遍历每个密码的每个字符,用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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区