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

密码验证合格程序

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

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;
//检测字符串s中是否有大小写字母、数字、其它符号四种中至少三种
bool char_in_str(string s) {
    int sum = 0;
    int i;
    string num("0123456789");
    for (i = 0; i < 26; ++i) {
        if (find(s.begin(), s.end(), 'a' + i) != s.end()) { //小写字母
            sum++;
            break;
        }
    }
    for (i = 0; i < 26; ++i) {
        if (find(s.begin(), s.end(), 'A' + i) != s.end()) { //大写字母
            sum++;
            break;
        }
    }
    for (auto it = num.begin(); it != num.end(); ++it) { //数字
        if (find(s.begin(), s.end(), *it) != s.end()) {
            sum++;
            break;
        }
    }
    for (i = 0; i < s.size(); ++i) {
        if (!isalnum(s[i]) && s[i] != 0 && s[i] != '\n') { //其他符号
            sum++;
            break;
        }
    }
    if (sum > 2) {
        return true;
    } else {
        return false;
    }
}
//检测字符串s中是否有长度大于2的子串重复
bool no_same_substr(string s) {
    int k = 0;
    for (int k = 0; k < s.size() - 3; ++k) {
        string t(s, k, 3);//将s中从k开始的3个字符赋给t
        string q(s, k + 3, s.size());//将s中从k+3开始的字符赋给q
        if (q.find(t) != string::npos) { //如果q中有t
            return false;
        }
    }
    return true;
}

int main() {
    string s;
    while (getline(cin, s)) {
        bool res1 = char_in_str(s);
        bool res2 = no_same_substr(s);
        if (s.size() > 8 && res1 && res2) {
            cout << "OK" << endl;
        } else {
            cout << "NG" << endl;
        }
    }
    return 0;
}

密码要求:

1.长度超过8位

s.size()>8

2.包括大小写字母、数字、其他符号四种中至少三种

对密码字符串s,依次检测其中是否有大写字母、小写字母、数字和其他符号,每存在一种类型就在总数sum上加1,最后如果sum大于等于3即密码合格;

3.不能有长度大于2的包含公共元素的子串重复

对于这个要求,我的理解是,不需要考虑子串重叠的情况。

思路:对于字符串s,将前三个字符(s[k],s[k+2], k=0)赋给t,t后面的赋给q,检测q中是否有t,如果有说明s中t是重复的,密码不合格;如果没有,++k,继续上述操作,直到遍历s,说明s中无重复子串。

全部评论

相关推荐

投递网易等公司10个岗位
点赞 评论 收藏
分享
09-28 22:01
已编辑
广西科技大学 IT技术支持
合适才能收到offe...:找桌面运维?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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