#include <iostream>
#include <string>
#include <random>

// 生成指定长度的随机字符串,包含随机数量的数字和字母
std::string generateKey(int length)
{
    // 构造随机数生成器
    std::random_device rd; // 随机数种子
    std::mt19937 gen(rd()); // 随机数生成器
    std::uniform_int_distribution<> dis_num(0, 9); // 数字范围
    std::uniform_int_distribution<> dis_char(0, 25); // 字母范围

    // 生成随机字符串
    std::string key;
    int num_count = 0; // 记录已经生成的数字数量
    int char_count = 0; // 记录已经生成的字母数量
    for (int i = 0; i < length; i++) {
        if (num_count < length / 2 && (dis_char(gen) % 2 == 0 || char_count >= length / 2)) {
            // 如果数字数量小于总长度的一半,并且当前随机到的数是偶数,或者字母数量已经达到总长度的一半,则生成一个数字
            key += std::to_string(dis_num(gen)); // 生成数字,并将其转换为字符串
            num_count++; // 数字数量加一
        } else {
            // 否则,生成一个字母
            key += static_cast<char>('a' + dis_char(gen)); // 生成字母,并将其转换为字符类型
            char_count++; // 字母数量加一
        }
    }
    return key;
}

int main() {
    std::string key = generateKey(16); // 生成长度为 16 的随机字符串
    std::cout << "Randomly generated key: " << key << std::endl; // 输出生成的随机字符串
    return 0;
}