jcy666 @ 2024-08-01 21:08:51
#include<bits/stdc++.h>
using namespace std;
bool pd(string s){
bool a=false,b=false,c=false,d=false,e=false;
if(s.size()>=6&&s.size()<=12){
a=true;
}
for(int i=0;i<s.size();i++){
if(s[i]>='a'&&s[i]<='z'){
b=true;
}
if(s[i]>='A'&&s[i]<='Z'){
c=true;
}
if(s[i]>='0'&&s[i]<='9'){
d=true;
}
if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'){
e=true;
}
}
if(a&&b&&c&&d&&e){
return true;
}
return false;
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
string s,x="";
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]==','){
if(pd(x)){
cout<<x<<endl;
x="";
continue;
}
}
x=x+s[i];
}
return 0;
}
by Nail9 @ 2024-08-01 21:54:09
@jcy666
cin
读入,如果某密码中含有空格,空格后的内容不会被 cin
读入char chr;
string s = "";
while(scanf("%c", &chr) != EOF) {
s.push_back(chr);
}
a&&b&&c&&d&&e
有误:题目说“大写字母,小写字母和数字必须至少有其中两种”,而不是每种都必须有by Nail9 @ 2024-08-01 22:01:09
@Nail9
btw,这道题数据量非常小,字符串最多100位,不用关闭同步流。
如果要关闭同步流,就不能用 scanf()
,你可以用 getline(cin, s)
读入数据。
by jcy666 @ 2024-08-02 12:48:22
@Nail9 谢谢好心人
by Nail9 @ 2024-08-02 12:57:08
@jcy666 刚才的提交里第2点你没改,a&&b&&c&&d&&e
有误
by jcy666 @ 2024-08-02 21:02:24
@Nail9 啊?
by jcy666 @ 2024-08-02 21:08:52
#include<bits/stdc++.h>
using namespace std;
bool pd(string s){
bool a=false,b=false,c=false,d=false,e=false;
if(s.size()>=6&&s.size()<=12){
a=true;
}
for(int i=0;i<s.size();i++){
if(s[i]>='a'&&s[i]<='z'){
b=true;
}
if(s[i]>='A'&&s[i]<='Z'){
c=true;
}
if(s[i]>='0'&&s[i]<='9'){
d=true;
}
if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'){
e=true;
}
}
bool bcd=false;
int t;
if(b) t++;
if(c) t++;
if(d) t++;
if(t>=2){
bcd=true;
}
if(bcd&&a&&e){
return true;
}
return false;
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
string s,x="";
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]==','){
if(pd(x)){
cout<<x<<endl;
x="";
continue;
}
}
x=x+s[i];
}
return 0;
}
@Nail9
by Nail9 @ 2024-08-03 10:33:19
@jcy666
123&^YUhg@!
字符串没有经过pd()
函数判断;pd(x)
是否为真,只要s[i]==','
,都要执行x="";
和continue;
。但是你把这段代码写在判断pd(x)
是否为真里面了,应当放到外面;pd
函数中,如果输入的字符串含有其他字符,这个字符串都是不合规的。以下是更改后的 AC 代码:
#include<bits/stdc++.h>
using namespace std;
bool pd(string s){
bool a=false,b=false,c=false,d=false,e=false,f=true; // 问题3初始化f为true
if(s.size()>=6&&s.size()<=12){
a=true;
}
for(int i=0;i<s.size();i++){
if(s[i]>='a'&&s[i]<='z'){
b=true;
}
else if(s[i]>='A'&&s[i]<='Z'){
c=true;
}
else if(s[i]>='0'&&s[i]<='9'){
d=true;
}
else if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'){
e=true;
}
else f=false; // 问题3,注意前面的if前都要加上else
}
bool bcd=false;
int t;
if(b) t++;
if(c) t++;
if(d) t++;
if(t>=2){
bcd=true;
}
if(bcd&&a&&e&&f){
return true;
}
return false;
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
string s,x="";
getline(cin,s);
for(int i=0;i<s.size();i++){
if(s[i]==','||i==s.size()-1){ // 问题1
if(pd(x)){
cout<<x<<endl;
}
x=""; // 问题2
continue;
}
x=x+s[i];
}
return 0;
}