1 条题解

  • 1
    @ 2024-12-8 18:26:35
    #include <bits/stdc++.h>  // 包含所有标准库头文件
    using namespace std;
    
    // 定义一个函数检查密码是否合法
    bool isValidPassword(string password) {
        // 1. 密码长度检查:密码必须在6到12个字符之间
        if (password.length() < 6 || password.length() > 12) {
            return false;
        }
    
        // 2. 定义是否包含不同类型字符的标志
        bool hasLower = false, hasUpper = false, hasDigit = false, hasSpecial = false;
        // 特殊字符集合
        string specialChars = "!@#$";
    
        // 3. 遍历密码中的每个字符
        for (int i = 0; i < password.length(); i++) {
            char ch = password[i];  // 获取当前字符
    
            // 4. 判断字符类型
            if (islower(ch)) {  // 如果是小写字母
                hasLower = true;
            } else if (isupper(ch)) {  // 如果是大写字母
                hasUpper = true;
            } else if (isdigit(ch)) {  // 如果是数字
                hasDigit = true;
            } else if (specialChars.find(ch) != string::npos) {  // 如果是特殊字符
                hasSpecial = true;
            } else {  // 如果字符不在允许的范围内,直接返回false
                return false;
            }
        }
    
        // 5. 判断密码是否满足至少两种字符类型且包含至少一个特殊字符
        int typeCount = hasLower + hasUpper + hasDigit;  // 计算密码中有多少种字符类型
        return (typeCount >= 2 && hasSpecial);  // 必须有至少两种字符类型和一个特殊字符
    }
    
    int main() {
        string input;  // 用于接收输入的字符串
        getline(cin, input);  // 读取一行输入
    
        // 6. 用逗号分隔输入的多个密码,存储到数组中
        char passwords[100][20];  // 假设最多100个密码,每个密码最多20个字符
        int passwordCount = 0;  // 密码数量计数器
    
        stringstream ss(input);  // 使用stringstream来分割字符串
        string temp;  // 临时字符串存储每个密码
    
        // 7. 读取逗号分隔的密码,并存入数组
        while (getline(ss, temp, ',')) {
            strcpy(passwords[passwordCount++], temp.c_str());  // 将密码存入数组
        }
    
        // 8. 遍历所有密码并检查每个密码是否合法
        for (int i = 0; i < passwordCount; i++) {
            if (isValidPassword(passwords[i])) {  // 如果密码合法
                cout << passwords[i] << endl;  // 输出合法密码
            }
        }
    
        return 0;
    }
    

    信息

    ID
    4859
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    15
    已通过
    4
    上传者