1 条题解
-
1
#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
- 上传者