题解 | #密码强度等级#

密码强度等级

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

#include <bits/stdc++.h>
#include <cctype>
using namespace std;

void CheckLength(std::string pwd, int &point) {
    auto len = pwd.size();
    if (len <= 4) {
        point += 5;
    } else if (len >= 5 && len <= 7) {
        point += 10;
    } else if (len >= 8) {
        point += 25;
    }
}

void CheckAlpha(std::string pwd, int &point) {
    int count = 0;
    int hasLower = 0;
    int hasUpper = 0;
    for (const char ch : pwd) {
        if (isalpha(ch)) {
            if (isupper(ch)) {
                hasUpper = 1;
            }
            if (islower(ch)) {
                hasLower = 1;
            }
        }
    }

    int ret = hasLower + hasUpper;

    if (ret == 0) {
        point += 0;
    } else if (ret == 1) {
        point += 10;
    } else if (ret == 2) {
        point += 20;
    }
}

void CheckDigit(std::string pwd, int &point) {
    int count = 0;
    int didgitCount = 0;
    for (const char ch : pwd) {
        if (isdigit(ch)) {
            didgitCount++;
        }
    }
    if (didgitCount == 0) {
        point += 0;
    } else if (didgitCount == 1) {
        point += 10;
    } else {
        point += 20;
    }
}

void CheckSymbol(std::string pwd, int &point) {
    int count = 0;
    int symbolCount = 0;
    for (const char ch : pwd) {
        if (ch >= 0x21 && ch <= 0x2f ||
            ch > 0x3A && ch <= 0X40 ||
            ch > 0x5B && ch <= 0X60 ||
            ch > 0x7B && ch <= 0X7E ) {
            symbolCount++;
        }
    }
    if (symbolCount == 0) {
        point += 0;
    } else if (symbolCount == 1) {
        point += 10;
    } else {
        point += 25;
    }
}

void CheckBonus(std::string pwd, int &point) {
    bool hasAlpha = false, hasLower = false, hasUpper = false, hasdigit = false, hasSymbol = false;
    for (const char ch : pwd) {
        if (isalpha(ch)) {
            hasAlpha = true;
            if (isupper(ch)) {
                hasUpper = true;
            }
            if (islower(ch)) {
                hasLower = true;
            }
        }
        if (isdigit(ch)) {
            hasdigit = true;
        }
        if ((ch >= 0x21 && ch <= 0x2F) ||
            (ch >= 0x3A && ch <= 0X40) ||
            (ch >= 0x5B && ch <= 0X60) ||
            (ch >= 0x7B && ch <= 0X7E) ) {
            hasSymbol = true;
        }
    }
    if (hasUpper && hasLower && hasdigit && hasSymbol) {
        point += 5;
        return;
    } 
     if (hasAlpha && hasdigit && hasSymbol) {
        point += 3;
        return;
    }
    if (hasAlpha && hasdigit) {
        point += 2;
        return;
    }
}

void PrintResult(int point) {
    string res;
    if (point >= 90) {
        res = "VERY_SECURE";
    } else if (point >= 80 && point < 90) {
        res = "SECURE";
    } else if (point >= 70 && point < 80) {
        res = "VERY_STRONG";
    } else if (point >= 60 && point < 70) {
        res = "STRONG";
    } else if (point >= 50 && point < 60) {
        res = "AVERAGE";
    } else if (point >= 25 && point < 50) {
        res = "WEAK";
    } else {
        res = "VERY_WEAK";
    }
    cout << res << endl;
}

void foo(string& pwd, int point) {
    CheckLength(pwd, point);
    CheckAlpha(pwd, point);
    CheckDigit(pwd, point);
    CheckSymbol(pwd, point);
    CheckBonus(pwd, point);
    PrintResult(point);
}

int main() {
    int point = 0;
    string pwd;
    while (getline(cin, pwd)) {
        foo(pwd, point);
    }
    return 0;
}

全部评论

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
暮雨轻歌:看起来hr不能接受我菜查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务