题解 | #密码强度等级#

密码强度等级

https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int m_length(int n) //长度判断得分
{    if (n <= 4)
        return 5;
    else if (n > 4 && n <= 7)
        return 10;
    else
        return 25;
}

int m_alpha(char string[], int len) //判断字母得分
{
    int m = 0, n = 0;
    for (int i = 0; i < len; i++) 
    {
        if (isupper(string[i])) //判断是否为大写字母,否则返回非零值
        {
            m = 1;
        }
        if (islower(string[i])) //判断是否为小写字母,否则返回非零值
        {
            n = 1;
        }
    }
    if (m == 0 && n == 0) {
        return 0;
    }
    else if ((m == 1 && n == 0) || (m == 0 && n == 1)) {
        return 10;
    }
    else if (m == 1 && n == 1) {
        return 20;
    }
    else
        return 0;
}

int m_number(char string[], int n) //判断数字得分
{
    int count = 0;
    for (int i = 0; i < n; i++) {
        if (isdigit(string[i]) != 0)//判断是否为数字,否则返回非零值
            count++;
    }
    if (count == 0)
        return 0;
    else if (count == 1)
        return 10;
    else
        return 20;
}

int m_punct(char string[], int n) //判断其他符号得分
{
    int count = 0;
    for (int i = 0; i < n; i++) 
    {
        if (ispunct(string[i]) != 0)//判断是否为标点符号和特殊符号,否则返回非零值
            count++;
    }
    if (count == 0)
        return 0;
    else if (count == 1)
        return 10;
    else
        return 25;
}

int m_reward(int a,int b,int c)//计算奖励分
{
    if(a!=0&&b!=0&&c==0)
        return 2;
    else if(a==10&&b!=0&&c!=0)
        return 3;
    else if(a==20&&b!=0&&c!=0)
        return 5;
    else
        return 0;
}

int main() 
{
    char string[300];
    scanf("%[^\n]", string);
    int len = strlen(string);
    int m1 = m_length(len); //长度
    int m2 = m_alpha(string, len); //字母
    int m3 = m_number(string, len); //数字
    int m4 = m_punct(string, len); //符号
    int m5 = m_reward(m2,m3,m4);//奖励分
    int m = m1 + m2 + m3 + m4 + m5;
    if(m>=90)
        printf("VERY_SECURE");
    if(m>=80&&m<90)
        printf("SECURE");
    if(m>=70&&m<80)
        printf("VERY_STRONG");
    if(m>=60&&m<70)
        printf("STRONG");
    if(m>=50&&m<60)
        printf("AVERAGE");
    if(m>=25&&m<50)
        printf("WEAK");
    if(m>=0&&m<25)
        printf("VERY_WEAK");    

    return 0;
}

c编程学习记录 文章被收录于专栏

为了华为od机试刷题学习记录

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务