Wang_Yue_Ran @ 2024-09-03 12:42:45
#include <bits/stdc++.h>
using namespace std;
int i, j, k; /* 分割时,i表示遍历的字符串A的下标,j表示遍历的数组a的下标,k表示遍历的数组里下标为j的字符
串下标 */
int main() {
string A, a[100]; //A表示输入的字符串,a表示分割后的字符串数组
cin >> A;
bool flag = true; //flag表示后面的while循环是否执行,如果不执行就变为false并停止循环执行
while(flag) { //以下循环为分割字符串进数组的操作
if(A[i] == ',') { /* 如果输入的字符串里有逗号,则下标+1,下一个字符存入a字符中下一个字符串的第
一个字符 */
i++;
j++;
k = 0;
}else{
a[j][k] = A[i];
i++;
k++;
}if(i == A.length()) flag = false;
}for(int x = 0; x < i; x++) {
bool FLAG = true; //FLAG表示密码是否合规
if(a[x].length() < 6 || a[x].length() > 12) { //判断密码长度条件合不合规
FLAG = false;
}else{
int APB = 0, apb = 0, num = 0, spec = 0; /* APB为大写个数,apb为小写个数,num为数字个数,
spec为四种特殊字符个数 */
for(int y = 0; y < a[x].length(); y++) {
if(a[x][y] >= 48 && a[x][y] <= 57) {
num++;
}else if(a[x][y] > 64 && a[x][y] <= 90) {
APB++;
}else if(a[x][y] > 96 && a[x][y] <= 122) {
apb++;
}else if(a[x][y] == '!' || a[x][y] == '@' || a[x][y] == '#' || a[x][y] == '$') {
spec++;
}
}if(APB + apb == 0 || APB + num == 0 || apb + num == 0) { /* 如果大写字母,小写字母,数字中
至少有两种不存在,密码不合规 */
FLAG = false;
}else if(spec == 0) { //四种特殊字符如果不存在,则密码不合规
FLAG = false;
}else if(APB + apb + num + spec != a[x].length()) { /* 如果四个变量值累加不等于字符串总长
度,则必有不合规的字符 */
FLAG = false;
}if(FLAG == true) { //如果密码合规,则输出密码并换行
for(int y = 0; y < a[x].length(); y++) {
cout << a[x][y];
}cout << endl;
}
}
}return 0;
}
by GZXUEXUE @ 2024-09-03 12:53:56
by GZXUEXUE @ 2024-09-03 12:57:48
by GZXUEXUE @ 2024-09-03 13:02:52
cout << a[x] << endl;
by GZXUEXUE @ 2024-09-03 13:19:33
string tmp = ""; // tmp存储每一段密码
for(; i < A.length(); i++) {
if(A[i] == ',') {
a[j++] = tmp;
tmp = "";
}else{
tmp += A[i];
}
}
by Wang_Yue_Ran @ 2024-09-04 12:39:03
@GZXUEXUE 已经改好了,谢谢