0分求助

B3843 [GESP202306 三级] 密码合规

zhuqiran12311 @ 2024-07-23 11:27:00

#include<bits/stdc++.h>
#define ll long long int
using namespace std;
bool check(string s)
{
    int len=s.length();
    if(len<6||len>12) return false;
    bool dxzm=false,xxzm=false,sz=false,tszf=false;
    for(int i=0;i<len;i++)
    {
        if(s[i]>='A'&&s[i]<='Z')
        {
            dxzm=true;
        }
        else if(s[i]>='a'&&s[i]<='z')
        {
            xxzm=true;
        }
        else if(s[i]>='0'&&s[i]<='9')
        {
            sz=true;
        }
        else if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$')
        {
            tszf=true;
        }
        else
        {
            return false;
        }
    }
    if(tszf&&dxzm+xxzm+sz>=2);
    {
        return true;
    }
    return false;   
}
int main()
{
    string s;
    cin>>s;
    int len=s.length();
    int pos=0;
    for(int i=0;i<len;i++)
    {
        if(s[i]==',')
        {
            string s1=s.substr(pos,i-pos);
            if(check(s1)) cout<<s1<<endl;
            pos=i+1;
        }
        else if(i==len-1)
        {
            string s1=s.substr(pos,i-pos+1);
            if(check(s1)) cout<<s1<<endl;
        }
    }
    return 0;
}

by LiXinLong_LXL @ 2024-07-31 10:49:32

字符串的第一位的下标为0,不为1,那么你check()函数中的这一步就有问题了:

if(len<6||len>12) return false;

如果s1这个字符串长度为5的话那么它实际上是有六个字符的。

同理,如果是长度为11的字符串实际上有12个字符。

所以你应该这样改

if(len<5||len>11) return false;

by zhuqiran12311 @ 2024-08-02 09:25:18

谢谢大佬


by zhuqiran12311 @ 2024-08-02 09:26:45

还是没过


by zhuqiran12311 @ 2024-08-02 21:27:34

@LiXinLong_LXL 我找到错误了,是一个if多了一个分号


by mdxz114514 @ 2024-08-02 21:27:52

已线下修改

if(tszf&&dxzm+xxzm+sz>=2);

去掉逗号


by mdxz114514 @ 2024-08-02 21:28:28

@mdxz114514 是分号,口误


by LiXinLong_LXL @ 2024-08-03 15:11:55

@zhuqiran12311 没错没错,我都没看到这个分号。


|