求助,快崩溃了

B3843 [GESP202306 三级] 密码合规

sakura03 @ 2023-09-04 19:32:27

#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include <cmath>
using namespace std;
string s;
int main(){
    getline(cin,s);
    int pos1=0,pos2,flag,a=0;
    string sTemp;
    while(s.find(',')!=s.npos){
        a=0;
        flag=0;
        pos2=s.find(',');
        sTemp=s.substr(pos1,pos2);
        for(auto i:sTemp){
            if(isupper(i))a++;
            else if(islower(i))a++;
            else if(isdigit(i))a++;
            else if(i=='!'||i=='@'||i=='#'||i=='$')
                flag=1;
            else{
                flag=0;
                break;
            }
        }
        if(sTemp.size()>12)flag=0;
        if(sTemp.size()<6)flag=0;
        if(flag && a>=2)cout<<sTemp<<endl;
        s.erase(pos1,pos2+1);
    }
    a=0;
    flag=0;
    pos2=s.size()-1;
    sTemp=s;
    for(auto &i:sTemp){
        if(isupper(i))a++;
        else if(islower(i))a++;
        else if(isdigit(i))a++;
        else if(i=='!'||i=='@'||i=='#'||i=='$')
            flag=1;
        else{
            flag=0;
            break;
        }
    }
    if(sTemp.size()>12)flag=0;
    if(sTemp.size()<6)flag=0;
    if(flag && a>=2)cout<<sTemp<<endl;
    s.erase(pos1,pos2+1);
}
//已经改急了,代码面目全非

by sakura03 @ 2023-09-04 19:33:28

去原网站测了AC为什么洛谷过不了哇


by mamingyu0927 @ 2023-09-04 20:38:40

因为你不能在第二个for循环里面使用a++,这样如果有超过2的的同一种字符就不对了,他要的是2种以上的类型而不是2个以上的字符...可以用来三个变量储存,如果有就等于1(而不是加1),判断时把三个变量加一加,看是否大于等于2就行


by sakura03 @ 2023-09-06 20:07:20

@mamingyu0927 懂了,感谢!


|