题目描述
网站注册需要有用户名和密码,编写程序以检查用户输入密码的有效性。合规的密码应满足以下要求 :。
-
只能由 a∼z 之间 26 个小写字母、A∼Z 之间 26 个大写字母、0∼9 之间 10 个数字以及
!@#$四个特殊字符构成。 -
密码最短长度 :6 个字符,密码最大长度 :12 个字符。
-
大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。
输入格式
输入一行不含空格的字符串。约定长度不超过 100。该字符串被英文逗号分隔为多段,作为多组被检测密码。
输出格式
输出若干行,每行输出一组合规的密码。输出顺序以输入先后为序,即先输入则先输出。
输入输出样例
输入 #1复制
seHJ12!@,sjdkffH$123,sdf!@&12HDHa!,123&^YUhg@!
输出 #1复制
seHJ12!@ sjdkffH$123
说明/提示
【样例 1 解释】
输入被英文逗号分为了四组被检测密码:seHJ12!@、sjdkffH$123、sdf!@&12HDHa!、123&^YUhg@!。其中 sdf!@&12HDHa! 长度超过 12 个字符,不合规;123&^YUhg@! 包含四个特殊字符之外的字符不合规。
下面是我解决这道题的思路和代码:
思路:
一. 分割输入字符串:使用逗号作为分隔符,将分割字符串分割为多个待检测的密码。
二. 逐个检查密码合规性:
1. 检查长度是否在6至12个字符之间。
2. 检查是否只包含合法字符(大小写字母、数字、!@#$)。
3. 检查是否包含至少一个特殊字符。
4. 检查大小写字母和数字是否至少包含两种。
三. 输出合规密码:按输入顺序输出所有符合条件的密码。
下面是我的代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
string m;
getline(cin, m);
vector<string> arry;
string j;
for (char k : m) {
if (k == ',') {
if (!j.empty()) {
arry.push_back(j);
j.clear();
}
} else {
j += k;
}
}
if (!j.empty()) {
arry.push_back(j);
}
for (string &y : arry) {
LL l = y.length();
if (l < 6 || l > 12) {
continue;
}
bool u = false, i = false, o = false;
bool p = false;
bool n = true;
for (char k : y) {
if (k >= 'a' && k <= 'z') {
u = true;
} else if (k >= 'A' && k <= 'Z') {
i = true;
} else if (k >= '0' && k <= '9') {
o = true;
} else if (k == '!' || k == '@' || k == '#' || k == '$') {
p = true;
} else {
n = false;
break;
}
}
LL h = 0;
if (u == true) {
h++;
}
if (i == true) {
h++;
}
if (o == true) {
h++;
}
if (p && n && h >= 2) {
cout << y << endl;
}
}
return 0;
}
1674

被折叠的 条评论
为什么被折叠?



