样例过了,0分求调

B3843 [GESP202306 三级] 密码合规

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

已关注


| 下一页