0分求调

B3843 [GESP202306 三级] 密码合规

davitory @ 2024-10-07 22:00:08

#include <iostream>
using namespace std;

int main()
{
    std::string line;
    bool ToF = 0;
    int i = 0, j = 0, k = 0, cnt[4],tmp=0;

    std::getline(std::cin, line);

    for (i = 0; i < line.size(); i)
    {

            while (j < line.size() && line[j] != ',')
            {
                ++tmp;
                j++;
            }
            if (tmp < 6 || tmp>12)
            {
                ;
            }
            else
            {
                //大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个
                for (k = i; k <= j; k++)//
                {
                    tmp = 0;
                    if (line[k] >= 'A' && line[k] <= 'Z')
                    {
                        cnt[0] = 1;
                        tmp++;
                    }
                    else if (line[k] >= 'a' && line[k] <= 'z')
                    {
                        cnt[1] = 1;
                        tmp++;
                    }
                    else if (line[k] >= '0' && line[k] <= '9')
                    {
                        cnt[2] = 1;
                        tmp++;
                    }
                    else if (line[k] == '!' || line[k] <= '#' || line[k] <= '@' || line[k] <= '$')
                    {
                        cnt[3] = 1;
                        tmp++;
                    }
                    else
                    {
                        ToF = 1;
                    }
                }
                if ((cnt[0] + cnt[1] + cnt[2] >= 2) && cnt[3] == 1 && ToF == 0)
                {
                    cnt[0] = 0;
                    cnt[1] = 0;
                    cnt[2] = 0;
                    cnt[3] = 0;
                    for (k = i; k < j; k++)//
                    {
                        cout << line[k];
                    }
                    cout << endl;
                }
                ToF = 0;
            }
            tmp = 0;
            i = j+1;
            j++;

    }
    return 0;
}

by tyt_ @ 2024-10-17 19:36:46

哥们,你这个多加个逗号就行了

#include <iostream>
using namespace std;

int main()
{
    std::string line;
    bool ToF = 0;
    int i = 0, j = 0, k = 0, cnt[4],tmp=0;

    std::getline(std::cin, line);
    line+=',';//多加在这里
    for (i = 0; i < line.size(); i)
    {

            while (j < line.size() && line[j] != ',')
            {
                ++tmp;
                j++;
            }
            if (tmp < 6 || tmp>12)
            {
                ;
            }
            else
            {
                //大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个
                for (k = i; k <= j; k++)//
                {
                    tmp = 0;
                    if (line[k] >= 'A' && line[k] <= 'Z')
                    {
                        cnt[0] = 1;
                        tmp++;
                    }
                    else if (line[k] >= 'a' && line[k] <= 'z')
                    {
                        cnt[1] = 1;
                        tmp++;
                    }
                    else if (line[k] >= '0' && line[k] <= '9')
                    {
                        cnt[2] = 1;
                        tmp++;
                    }
                    else if (line[k] == '!' || line[k] <= '#' || line[k] <= '@' || line[k] <= '$')
                    {
                        cnt[3] = 1;
                        tmp++;
                    }
                    else
                    {
                        ToF = 1;
                    }
                }
                if ((cnt[0] + cnt[1] + cnt[2] >= 2) && cnt[3] == 1 && ToF == 0)
                {
                    cnt[0] = 0;
                    cnt[1] = 0;
                    cnt[2] = 0;
                    cnt[3] = 0;
                    for (k = i; k < j; k++)//
                    {
                        cout << line[k];
                    }
                    cout << endl;
                }
                ToF = 0;
            }
            tmp = 0;
            i = j+1;
            j++;

    }
    return 0;
}

by tyt_ @ 2024-10-17 19:41:10

@tyt_ 好像不行


by tyt_ @ 2024-10-17 19:43:11

@davitory 实在不行就用我的这个

#include<bits/stdc++.h>
using namespace std;
int main(){
    string n,a="";
    cin>>n;
    n+=',';
    int lenn=n.size();
    for(int i=0;i<lenn;i++){
        if(n[i]!=',') a+=n[i];
        else{
            int la=a.size();
            if(la<=12&&la>=6){
                bool zm=0,xx=0,sz=0,zf=0,qt=0;
                for(int i=0;i<la;i++){
                    if(a[i]<='9'&&a[i]>='0') sz=1;
                    else if(a[i]>='a'&&a[i]<='z') xx=1;
                    else if(a[i]>='A'&&a[i]<='Z') zm=1;
                    else if(a[i]=='!'||a[i]=='@'||a[i]=='#'||a[i]=='$') zf=1;
                    else qt=1; 
                }
            if(zm+xx+sz>=2&&zf==1&&qt==0) cout<<a<<endl;

            }
        a="";
        }
    }
return 0;
} 

|