0分求助!!(C++)

B3843 [GESP202306 三级] 密码合规

LiXinLong_LXL @ 2024-05-31 22:46:26

#include<bits/stdc++.h>
#define ll long long
using namespace std;
char s[105];
int ans; 
int num=1,len,flag;
bool have1,have2,have3,have4,f=1;
int main(){
    cin>>s;
    s[strlen(s)]=',';
    for(int i=0;i<=strlen(s);i++){
        //条件1
        if(s[i]>='a' and s[i]<='z') have1=1;
        else if(s[i]>='A' and s[i]<='Z') have2=1;
        else if(s[i]>='0' and s[i]<='9') have3=1;
        else if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$') have4=1;
        else if(s[i]!=',') f=0;
        else{
            bool temp=0;
            //判断是否满足第一个条件 
            //判断是否含有要求的字符 
            if(f==0) temp=1;
            //判断是否满足第二个条件 
            //判断长度 
            if(len<6 or len>12) temp=1;
            //判断是否满足第三个条件  
            ans=have1+have2+have3;
            if(ans<2) temp=1;
            ans+=have4;
            if(ans<3) temp=1;
            //审核
            if(temp==1){
                flag=i+1;
                len=0;
                ans=0;
                f=1;
                have1=0,have2=0,have3=0,have4=0; 
                continue;
            } 
            //输出 
            for(int j=flag;j<i;j++) cout<<s[j];
            cout<<endl;
            //标记 
            flag=i+1;
            len=0;
            ans=0;
            f=1;
            have1=0,have2=0,have3=0,have4=0; 
        }
        len++;
    }
    return 0;
}

by ybx2023saier @ 2024-07-16 16:08:53

@LiXinLong_LXL

#include<iostream>
using namespace std;
char s[101]; 
char str[101];//存需判断的一段字符串 
bool check(char *s,int len)//判断 
{
    if(len<6||len>12)
        return false;//判断长度 
    bool dx=false,xx=false,sz=false,zf=false;//dx:大写;xx:小写;sz:数字;zf:特殊字符 
    for(int i=0;s[i]!='\0';i++)
    {
        if('A'<=s[i]&&s[i]<='Z') dx=true;
        else if('a'<=s[i]&&s[i]<='z') xx=true;
        else if('0'<=s[i]&&s[i]<='9') sz=true;
        else if(s[i]=='!'||s[i] == '@'||s[i]=='#'||s[i]=='$') zf=true;
        else return false;  //如果有特殊字符的字符以外的字符,判为不合法 
    }
    if(!zf) return false;
    if(dx+xx+sz<2) return false;//至少要有两个 
    return true;
}
int main() 
{
    cin>>s;
    int len=0;
    for(int i=0;s[i]!='\0';i++)
    {
        if(s[i]!=',')
        {
            str[len]=s[i];
            len++; 
        }
        else
        {
            str[len]='\0';
            if(check(str,len))//判断 
                cout<<str<<endl;
            len=0;//归置 
        }
    }
    if(len>0)//对最后一段字符串进行判断 
    {
        str[len]='\0';
        if(check(str,len))
            cout<<str<<endl;
    }
    return 0;
}

|