求助RE了

B3843 [GESP202306 三级] 密码合规

tu_huang_di @ 2024-07-15 14:50:54

#include<iostream>
using namespace std;
char a,c[100];
bool shu,dz,xz,fu;
int cnt;
int main()
{
    for(int k=1;;k++)
    {
        shu=dz=xz=fu=0;
        cnt=0;
        for(int g=1;;g++)
        {
            cin>>a;
            c[g]=a;
            if(a==','||a=='\n')
                break;
            cnt++;
            if(a<='z'&&a>='a')xz=1;
            if(a<='Z'&&a>='A')dz=1;
            if(a<='9'&&a>='0')shu=1;          
            if(a=='!'||a=='@'||a=='#'||a=='$')fu=1;
        }
        if((xz==1&&dz==1&&fu==1&&(cnt<=12&&cnt>=6))||(xz==1&&shu==1&&fu==1&&(cnt<=12&&cnt>=6))||(dz==1&&shu==1&&fu==1&&(cnt<=12&&cnt>=6)))
        {
            for(int i=1;i<=cnt;i++)
            {
                cout<<c[i];
                c[i]=0;
            }
            cout<<endl;
        }
        if(a=='\n')
            break;
    }
    return 0;
}

by ybx2023saier @ 2024-07-15 16:16:47

你的问题如下:

1由于你是从下标1开始的,所以你的数组应该再大一点;

2你没有针对除特殊字符以外的字符进行判断

然后好像没了

本AC代码:

#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;
}

by ybx2023saier @ 2024-07-15 16:17:40

@tu_huang_di


by tu_huang_di @ 2024-07-17 20:20:25

@ybx2023saier 谢谢,以AC


|