wa了,求助大佬

B3843 [GESP202306 三级] 密码合规

Lava_Dreamer @ 2024-12-16 17:27:52

#include<bits/stdc++.h>
using namespace std;
int main(){
    int low=0,up=0,num=0,zf=0,error=0,n,ascii,be,en;
    char a[1000];
    scanf("%s",a);
    be=1;en=1;n=strlen(a);a[n+1]=',';
    for(int x=1;x<=n;x++){
        ascii=int(a[x]);
        if(ascii>=48&&ascii<=57) num=1;
        else{
            if(ascii>=65&&ascii<=90) up=1;
            else{
                if(ascii>=97&&ascii<=122) low=1;
                else{
                    if(ascii==33||ascii==57||ascii==35||ascii==36) zf=1;
                    else{
                        if(ascii==44){
                            int len=be-en;
                            if(low+up+num>=2&&zf==1&&error==0&&len>=6&&len<=12){
                                for(int i=be;i<en;i++) cout<<a[i];
                                cout<<"\n";
                            }
                        low=0;up=0;num=0;zf=0;error=0;be=x+1;
                        }
                        else error=1;
                    }
                }
            }
        }
        en++;
    }
}

by PeppaYang @ 2024-12-16 18:06:33

#include<bits/stdc++.h>
using namespace std;
long long n;
string st;
int a,b,c,d,z=0;
void pd(){
    a=0;
    b=0;
    c=0;
    d=0;
    int sum=0;
    for(int i=0;i<st.size();i++){
        if(st[i]==','){
            if(sum<6 || sum>12){
                z=i+1;
                a=0;
                b=0;
                c=0;
                d=0;
                sum=0;
                continue;
            }
            if((a==0 && c==0) || (b==0 && c==0) || (a==0 && b==0) || d==0){
                a=0;
                z=i+1;
                b=0;
                c=0;
                d=0;
                sum=0;
                continue;
            }
            for(int j=z;j<i;j++){
                cout<<st[j];
            }
            cout<<endl;
            a=0;
            b=0;
            c=0;
            d=0;
            z=i+1;
            sum=0;
        }
        if(st[i]>='A' && st[i]<='Z'){
            a++;
        }
        if(st[i]<='z' && st[i]>='a'){
            b++;
        }
        if(st[i]<='9' && st[i]>='0'){
            c++;
        }
        if(st[i]=='!'){
            d++;
        }
        if(st[i]=='@'){
            d++;
        }
        if(st[i]=='#'){
            d++;
        }
        if(st[i]=='$'){
            d++;
        }
        sum++;
    }
    return ;
}

int main(){
    cin>>st;
    pd();
    return 0;
}

懂了?


by JmBecca @ 2024-12-16 18:23:37

@Lava_Dreamer

不是我喷你哈,但是这坨代码真的是漏洞百出哈。给你详细剖析一下……

首先字符串的第一位下标是0,最后一位是n-1,所以你既然字符串长度记为n,那么在后面加逗号应该是:

a[n]=',';

而不是:

a[n+1]=',';

然后,if-else语句不是你这么用的,你这样嵌套太多,也会很乱。建议改if-else if语句。还有字符比较直接单引号加字符就可以直接比较啦,不用去记ASCII码的哈 代码如下:

ascii=a[x];
        if(ascii>='0'&&ascii<='9') num=1;
        else if(ascii>='A'&&ascii<='Z') up=1;
        else if(ascii>='a'&&ascii<='z') low=1;
        else if(ascii=='@'||ascii=='!'||ascii=='#'||ascii=='$') zf=1;

下面知道你是要判断了,但是求长的时候减反了哈。应该是用en-be。还有就像刚刚说的,字符串第一位是从0开始的,所以be初始化为0哈,不是1。

判断字符个数的时候你写的是:

if(zf==1)

但是题目是说“至少一个”哈,所以要写的是大于等于1哈。

代码如下:

else if(ascii==','){
            int len=en-be;
            if(low+up+num>=2&&zf>=1&&error==0&&len>=6&&len<=12){
                for(int i=be;i<en;i++) cout<<a[i];
                cout<<endl;
            }
            low=0;up=0;num=0;zf=0;error=0;be=x+1;
        }

其他的就没有什么问题了哈。整合一下,你就AC了。


by Lava_Dreamer @ 2024-12-16 20:22:12

@JmBecca AC了,蟹蟹大佬Thank you٩('ω')و


by JmBecca @ 2024-12-16 20:33:27

@Lava_Dreamer壶关哈嘻嘻


|