题解 | #密码验证合格程序#

密码验证合格程序

https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

#include <stdio.h>
#include <string.h>
#define NEEDNUM 100;
//首先验证长度
//其次确保包含三种元素
//验证没有3个字符及以上的重复
//重复的验证大概是取指针p到p+i,验证p+1后面有没有i个元素是相等的,用strncmp
int ElmentSum(int element[4]) {
    int sum = 0;
    for (int i = 0; i < 4; i++) {
        sum += *(element + i);
    }
    return sum;
}
int main() {
    int a = NEEDNUM;
    char pswd[a][101];

    //unsigned int islegal=0;//用32位来保存好像也不太够,不知道一组字符串会有多少个,所以还是老老实实的先全接受得到密码个数
    int num = 0;
    while (gets(pswd[num]))

    {
        if (*pswd[num] == NULL) break;
        num++;
    }

    //int isLegal[num];
    for (int i = 0; i < num; i++) {
        if (strlen(pswd[i]) > 8) {
            //if(Inclue3Element())
            //用一个四元素的element数组来表示{0,0,0,0}是否包含所需的元素,若总和大于等于3即为通过
            //一个循环整个字符串
            //先判断数组的情况如果element的sum为0,则判断数字,小写字母,大写字母,符号
            //若为sum=1,则验证是哪个为1,哪个是1就不去判断那个分支了
            int element[4] = {0, 0, 0, 0};
            for (int j = 0; j < strlen(pswd[i]); j++) {
                if (ElmentSum(element) >= 3) break;
                //A:65Z:90 a:97z:122 0:48 9:57
                else {
                    if (element[0] == 0) {
                        if (pswd[i][j] >= 48 && pswd[i][j] <= 57) {
                            element[0]++;
                            continue;
                        }
                    }
                    if (element[1] == 0) {
                        if (pswd[i][j] >= 97 && pswd[i][j] <= 122) {
                            element[1]++;
                            continue;
                        }
                    }
                    if (element[2] == 0) {
                        if (pswd[i][j] >= 65 && pswd[i][j] <= 90) {
                            element[2]++;
                            continue;
                        }
                    }
                    if (element[3] == 0) {
                        if ((pswd[i][j] >= 48 && pswd[i][j] <= 57) || (pswd[i][j] >= 97 &&
                                pswd[i][j] <= 122) || (pswd[i][j] >= 65 && pswd[i][j] <= 90));
                        else element[3]++;
                        continue;
                    }

                }

            }
            if (ElmentSum(element) >= 3) {
                //printf("OK\n");
                //不能有长度大于2的包含公共元素的子串重复
                int isrepeat = 0;
                for (int j = 0; j < strlen(pswd[i]); j++) {
                    char* p = pswd[i] + j; //不能是pswd[i][j]
                    char cap3char[3] = {*p, *(p + 1), *(p + 2)};
                    char capchar = *p;
                    //这样一个一个找循环有点多,优化一下
                    // for(int k=2;k<strlen(pswd[i])-3;k++)
                    // {

                    //     if (strncmp(p,p+k,3)==0)
                    //     {
                    //         isrepeat=1;
                    //         break;
                    //     }
                    // }

                    while (strchr(p + 3, capchar) !=
                            0) { //若距离当前capchar右边3个字符以上有与capchar一样的字符
                        //int k=strchr(p+3,capchar)-p;
                        //要排除掉第一个
                        p = strchr(p + 1, capchar); //直接让p到下一个是capchar的地方
                        if (strncmp(cap3char, strchr(p, capchar), 3) == 0) {
                            isrepeat = 1;
                            break;
                        }

                    }
                    if (isrepeat == 1) {
                        //printf("NG\n");
                        break;
                    }

                }
                if (isrepeat == 1) {
                    printf("NG\n");

                } else printf("OK\n");

            } else printf("NG\n");



        } else printf("NG\n"); //isLegal[i]=0;




    }


    return 0;
}

全部评论

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务