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 懂了,感谢!