Youmh @ 2024-10-03 20:28:14
#include <bits/stdc++.h>
using namespace std;
int main(){
string a;
cin >> a;
string book[109];
int cnt = 0;
int t = 0;
for(int i = 0;i < a.size();i++){
if(a[i] == ','){
cnt++;
book[cnt] = a.substr(t , i - t);
t = i + 1;
}
}
cnt++;
book[cnt] = a.substr(t , a.size() - t);
for(int i = 1;i <= cnt;i++){
bool flag = true;
if(book[i].size() > 12 || book[i].size() < 6) continue;
int f1 = 0 , f2 = 0 , f3 = 0 , f4 = 0;
for(int j = 0;j < book[i].size();j++){
if(isupper(book[i][j])) f1 = 1;
else if(islower(book[i][j])) f2 = 1;
else if(isdigit(book[i][j])) f3 = 1;
else if(book[i][j] == '!' || book[i][j] == '@' || book[i][j] == '#' || book[i][j] == '$') f4 = 1;
else{
flag = false;
break;
}
}
if(flag == false) continue;
if(f1 + f2 + f2 >= 2 && f4 == 1)cout<< book[i] << endl;
}
return 0;
}
by MLSY_OIer_ZXL @ 2024-10-03 21:43:47
我应该是第一个看到的,让我品品
by MLSY_OIer_ZXL @ 2024-10-03 21:53:32
怎么找了半天没找到你的cin
by MLSY_OIer_ZXL @ 2024-10-03 21:54:23
看到了
by MLSY_OIer_ZXL @ 2024-10-03 21:55:40
在你的代码中,字符串的分割部分没有考虑到最后一个密码。虽然你已经在循环中处理了分隔符,但在处理最后一个密码时你使用了一个额外的 cnt 变量来增加计数,这可能会导致索引错误。使用更简洁的方式来分割字符串可能会更好。
by MLSY_OIer_ZXL @ 2024-10-03 21:56:20
在有效性检查的部分,条件判断有点小问题。具体来说,你的条件判断 if(f1 + f2 + f2 >= 2 && f4 == 1) 中的 f2 被重复计算了一次,应该改成 f1 + f2 + f3 >= 2。
by MLSY_OIer_ZXL @ 2024-10-03 21:56:37
程序没有问题地输出符合条件的密码,但可能在某些环境中需要考虑输出的格式(每行一个结果)。
by MLSY_OIer_ZXL @ 2024-10-03 21:56:47
尽量使用 STL 库中的功能来简化代码,例如使用 std::vector 来存储密码。
by MLSY_OIer_ZXL @ 2024-10-03 21:58:39
AC CODE:
#include <iostream>
#include <vector>
#include <sstream>
#include <cctype>
using namespace std;
bool isValidPassword(const string &password) {
if (password.size() < 6 || password.size() > 12) {
return false;
}
int hasUpper = 0, hasLower = 0, hasDigit = 0, hasSpecial = 0;
const string specialChars = "!@$#";
for (char ch : password) {
if (isupper(ch)) {
hasUpper = 1;
} else if (islower(ch)) {
hasLower = 1;
} else if (isdigit(ch)) {
hasDigit = 1;
} else if (specialChars.find(ch) != string::npos) {
hasSpecial = 1;
} else {
return false;
}
}
return (hasUpper + hasLower + hasDigit >= 2 && hasSpecial == 1);
}
int main() {
string input;
cin >> input;
stringstream ss(input);
string password;
vector<string> validPasswords;
while (getline(ss, password, ',')) {
if (isValidPassword(password)) {
validPasswords.push_back(password);
}
}
for (const string &validPassword : validPasswords) {
cout << validPassword << endl;
}
return 0;
}
by MLSY_OIer_ZXL @ 2024-10-03 21:59:51
求关!!!
by Youmh @ 2024-10-04 08:39:16
已关注