You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现满足指定规则的30位C++密码生成器

C++ 密码生成器规则实现方案

直接按以下逻辑修改代码,即可满足你的密码规则要求:

  1. 拆分字符类别:将不同类型字符单独存储,方便精准控制各类字符的生成数量
  2. 优先生成最低要求字符:先确保生成1个小写、6个大写、8个数字,以及2-5个随机数量的特殊字符
  3. 填充剩余位数:用剩余位数从所有字符类别中随机选取补充
  4. 打乱密码顺序:避免密码出现固定类别顺序,保证随机性

修改后的完整代码:

#include <iostream>
#include <string>
#include <time.h>
#include <algorithm> // 用于打乱字符顺序

using namespace std;

int main() {
    srand(time(0));
    string pass;

    // 拆分不同类别的字符集合
    string lower = "abcdefghijklmnopqrstuvwxyz";
    string upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string digit = "0123456789";
    string special = ";,:.+-*/%><=!~^&|[]{}()";
    string all_chars = lower + upper + digit + special;

    // 生成满足最低要求的字符
    // 至少1个小写字母
    pass += lower[rand() % lower.size()];
    // 至少6个大写字母
    for (int i = 0; i < 6; ++i) {
        pass += upper[rand() % upper.size()];
    }
    // 至少8个数字
    for (int i = 0; i < 8; ++i) {
        pass += digit[rand() % digit.size()];
    }
    // 2-5个特殊字符
    int special_count = rand() % 4 + 2; // 生成2到5之间的随机数
    for (int i = 0; i < special_count; ++i) {
        pass += special[rand() % special.size()];
    }

    // 填充剩余字符至30位
    int remaining = 30 - pass.size();
    for (int i = 0; i < remaining; ++i) {
        pass += all_chars[rand() % all_chars.size()];
    }

    // 打乱密码字符顺序,消除固定结构
    random_shuffle(pass.begin(), pass.end());

    cout << "Your password: " << pass << endl;

    return 0;
}

关键说明

  • 字符拆分:将四类字符分开后,能精准控制每类字符的生成数量,确保满足规则的最低要求
  • 特殊字符数量控制:rand()%4 +2可以生成2到5之间的随机数,刚好符合2-5个特殊字符的要求
  • 打乱顺序:random_shuffle会随机重排密码中的字符,避免先固定生成各类字符导致的结构规律问题
  • 边界适配:通过pass.size()计算剩余位数,自动适配不同的特殊字符数量,保证最终密码刚好30位

内容的提问来源于stack exchange,提问作者infoguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:01:06