请帮我查查原因,0分,运行无输出

B3843 [GESP202306 三级] 密码合规

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

  1. 题目中“不超过100”也有等于100的情况,所以a数组应该开100以上。

by GZXUEXUE @ 2024-09-03 12:57:48

  1. 第20行的判断条件应该是 x<j

by GZXUEXUE @ 2024-09-03 13:02:52

  1. 第46~48行可以直接写
    cout << a[x] << endl;

by GZXUEXUE @ 2024-09-03 13:19:33

  1. 第8~19行改为:
    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 已经改好了,谢谢


|