题解 | #密码强度等级#

密码强度等级

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

#import <Foundation/Foundation.h>

// 计算长度分
int lengthScore(int length) {
    if (length <= 4) {
        return 5;
    } else if (length <= 7) {
        return 10;
    } else {
        return 25;
    }
}

// 计算字母分
int alphaScore(char passwd[]) {
    int hasUpper = 0;
    int hasLower = 0;
    for (int i = 0; i < strlen(passwd); i++) {
        if (passwd[i] >= 65 && passwd[i] <= 90) {
            hasUpper = 1;
        } else if (passwd[i] >= 97 && passwd[i] <= 122) {
            hasLower = 1;
        }
    }
    if (hasLower == 0 && hasUpper == 0) {
        return 0;
    } else if (hasLower == 1 && hasUpper == 1) {
        return 20;
    } else {
        return 10;
    }
}

// 计算数字分
int digitalScore(char passwd[]) {
    int digitalNum = 0;
    for (int i = 0; i < strlen(passwd); i++) {
        if (passwd[i] >= 48 && passwd[i] <= 57) {
            digitalNum ++;
        }
    }
    if (digitalNum == 0) {
        return 0;
    } else if (digitalNum == 1) {
        return 10;
    } else {
        return 20;
    }
}

// 计算符号分
int symbolScore(char passwd[]) {
    int symbolNum = 0;
    for (int i = 0; i < strlen(passwd); i++) {
        if (passwd[i] < 48 || (passwd[i] > 57 && passwd[i] < 65) || (passwd[i] > 90 &&
                passwd[i] < 97) || passwd[i] > 122) {
            symbolNum ++;
        }
    }
    if (symbolNum == 0) {
        return 0;
    } else if (symbolNum == 1) {
        return 10;
    } else {
        return 25;
    }
}

// 计算奖励分
int awardScore(int alpScore, int digScore, int symScore) {
    if (alpScore == 20 && digScore > 0 &&
            symScore > 0) {
        return 5;
    } else if (alpScore == 10 && digScore > 0 &&
               symScore > 0) {
        return 3;
    } else if (alpScore == 10 && digScore > 0 &&
               symScore == 0) {
        return 2;
    } else {
        return 0;
    }
}

// 格式化导出字符串
char* exportResult(int score) {
    if (score >= 90) {
        return "VERY_SECURE";
    } else if (score >= 80) {
        return "SECURE";
    } else if (score >= 70) {
        return "VERY_STRONG";
    } else if (score >= 60) {
        return "STRONG";
    } else if (score >= 50) {
        return "AVERAGE";
    } else if (score >= 25) {
        return "WEAK";
    } else {
        return "VERY_WEAK";
    }
}

int main(int argc, char* argv[]) {
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    char passwd[300];
    gets(passwd);
    // printf("原始密码%s\n", passwd);

    int lenScore = lengthScore(strlen(passwd));
    int alpScore = alphaScore(passwd);
    int digScore = digitalScore(passwd);
    int symScore = symbolScore(passwd);
    int awaScore = awardScore(alphaScore(passwd), digitalScore(passwd), symbolScore(passwd));
    int totalScore = lenScore + alpScore + digScore + symScore + awaScore;
    // printf("lenScore is %d\n", lenScore);
    // printf("alpScore is %d\n", alpScore);
    // printf("digScore is %d\n", digScore);
    // printf("symScore is %d\n", symScore);
    // printf("awaScore is %d\n", awaScore);
    // printf("totalScore is %d\n", totalScore);
    printf("%s", exportResult(totalScore));

    [pool drain];
    return 0;
}





全部评论

相关推荐

09-29 00:03
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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