求调......样例过

B3843 [GESP202306 三级] 密码合规

SunriseLJY @ 2024-12-15 09:30:59

自己调了半天找不到问题......

求大佬调

代码

#include<iostream>
using namespace std;

bool sc = false; //strange char
int bsn = 0; //big letter,small letter,number

bool check(string s){
    if(s.size() > 12 || s.size() < 6) return false;
    else{
        for(int i=0; i<s.size(); i++){
            if(s[i] >= '0' && s[i] <= '9') bsn++;
            else if(s[i] >= 'A' && s[i] <= 'Z') bsn++;
            else if(s[i] >= 'a' && s[i] <= 'z') bsn++;
            else if(s[i] == '!' || s[i] == '@') sc = true;
            else if(s[i] == '#' || s[i] == '$') sc = true; 
        }
        if(sc && bsn >= 2) return true;
        return false;
    }
}

int main(){
    bool flag = false;
    string str;
    getline(cin, str);

    string st;
    for(int i=0; i<str.size(); i++){
        if(str[i] == ','){
            flag = true;
            if(check(st)) cout<<st<<endl;
            st = "";
            continue;
        }
        st += str[i];
    }

    if(!flag){
        if(check(st)) cout<<st<<endl;
    }

    return 0;
}

by gaohuashengtx @ 2024-12-15 20:52:12

#include<bits/stdc++.h>
using namespace std;
string s,t; 
int main() {
    cin>>s;s=s+",";
    for(int i=0;i<s.size();i++){
        if(s[i]==','){
            if(t.size()<6||t.size()>12){t="";continue;}//判断位数 
            int a=0,b=0,c=0,d=0,f1=0;//a代表小写字母 b代表大写字母 c代表数字 d代表特殊字符 f1代表是否都不满足以上条件 
            for(int j=0;j<t.size();j++){
                if(t[j]>='a'&&t[j]<='z')a++;//判断小写字母 
                else if(t[j]>='A'&&t[j]<='Z')b++;//判断大写字母
                else if(t[j]>='0'&&t[j]<='9')c++;//判断数字 
                else if(t[j]=='!'||t[j]=='@'||t[j]=='#'||t[j]=='$')d++;//判断特殊字符
                else {f1=1;break;}
            }
            if(((a>0)+(b>0)+(c>0))>=2&&d>0&&!f1){cout<<t<<endl;}//判断满足条件的个数 
            t="";
        }
        else t+=s[i];
    }
      return 0;
}

求关


|