C++ 随机数每次都相同的序列

2023-12-05

我写这个是为了生成一个随机密码:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

string read(string value) { //read value
    ifstream input;
    int olength;
    string line = "", output = "";
    size_t pos;
    bool a = true;
    int i = 0;
    input.open("pg_options.txt");
    if (!input.is_open()) {
        cout << "pg_options.txt missing.";
        return "error";
    }
    while (getline(input, line)) {
        pos = line.find(value);
        if (pos != string::npos) {
            while (a == true) {
                if (line[i] == '=') {
                    i++;
                    break;
                }
                else {
                    i++;
                }
            }
            olength = line.length() - value.length() - 1;
            for (int i2 = 0; i2 < olength; i2++) {
                output += line[i];
                i++;
            }
        }
    }
    input.close();
    return output;
}

char randupper() { //generate random upper case character
    char uppercase[26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
    int i = rand() % 26;
    return uppercase[i];
}

char randlower() { //generate random lower case character
    char lowercase[26] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
    int i = rand() % 26;
    return lowercase[i];
}

char randspecial() { //generate random special character
    char special[7] = { '!', '#', '$', '%', '&', '*', '?' };
    int i = rand() % 7;
    return special[i];
}

char randnumbers() { //generate random number
    char numbers[10] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
    int i = rand() % 10;
    return numbers[i];
}

void generate() { //generate the password
    string output = "";
    int i1=0, digits = 0, upper = 0, lower = 0, special = 0, numbers = 0;
    digits = stoi(read("digits")); //get digits
    if (read("include_upper_case") == "true") { //determine number of upper case characters
        upper = rand() % (digits / 2) + 1;
        digits -= upper;
    }
    if (read("include_lower_case") == "true") {
        lower = rand() % (digits / 2) + 1;
        digits -= lower;
    }
    if (read("include_special_characters") == "true") {
        special = rand() % (digits / 2) + 1;
        digits -= special;
    }
    if (read("include_numbers") == "true") {
        numbers = digits;
    }
    else { //if numbers not included
        if (read("include_upper_case") == "true") {
            upper += digits;
        }
        else if (read("include_lower_case") == "true") {
            lower += digits;
        }
        else if (read("include_special_characters") == "true") {
            special += digits;
        }
        else {
            cout << "error generating, please check your options.";
            return;
        }
    }
    for (int i = 0; i < stoi(read("digits")); i++) {
        i1 = rand() % 4;
        if (i1 == 0) { //if uppercase
            if (upper > 0) {
                output += randupper();
                upper--;
            }
            else {
                i--;
            }
        }
        else if (i1 == 1) {
            if (lower > 0) {
                output += randlower();
                lower--;
            }
            else {
                i--;
            }
        }
        else if (i1 == 2) {
            if (special > 0) {
                output += randspecial();
                special--;
            }
            else {
                i--;
            }
        }
        else if (i1 == 3) {
            if (numbers > 0) {
                output += randnumbers();
                numbers--;
            }
            else {
                i--;
            }
        }
    }
    cout << output;
}

int main() {
    generate();
    return 0;
}

pg_选项.txt:

include_special_characters=true
include_upper_case=true
include_lower_case=true
include_numbers=true
digits=10

然而,它每次运行时都会生成相同的东西,即HM*nfx375g,因此它具有相同的随机数序列。 (在generate()中,upper始终为2,lower始终为4,special始终为1,numbers始终为3...)是否有一个函数可以每次生成不同的随机数?


随机生成器需要播种才能有一个随机起点。在你的情况下,需要通过调用来完成srand()使用前rand(), 例如:

#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(0)); // <-- add this!
    generate();
    return 0;
}

然而,生成随机数的首选 C++ 方法是使用<random>头文件。srand() and rand()基本上是C的剩余部分。

看这个例子:

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

// get 'entropy' from device that generates random numbers itself
// to seed a mersenne twister (pseudo) random generator
static std::mt19937 generator(std::random_device{}());

char random_lowercase_char()
{
    static std::uniform_int_distribution<std::size_t> distribution('a', 'z');
    return static_cast<char>(distribution(generator));
}

char random_uppercase_char()
{
    static std::uniform_int_distribution<std::size_t> distribution('A', 'Z');
    return static_cast<char>(distribution(generator));
}

char random_number_char()
{
    static std::uniform_int_distribution<std::size_t> distribution('0', '9');
    return static_cast<char>(distribution(generator));
}

char random_special_char()
{
    static std::vector<char> specials{ '!', '#', '$', '%', '&', '*', '?' };
    static std::uniform_int_distribution<std::size_t> distribution(0, specials.size()-1);
    auto index = (distribution(generator));
    return specials[index];
}

int main()
{
    for (int i = 0; i < 40; i++)
    {
        std::cout << random_lowercase_char();
        std::cout << random_uppercase_char();
        std::cout << random_number_char();
        std::cout << random_special_char();
        std::cout << std::endl;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 随机数每次都相同的序列 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 尝试混合 CSV 和哈希表中的数据来创建变量

    我停在代码审查 询问我如何简化脚本 并建议使用哈希表因为它会清理代码 我得到了一个非常基本的例子 但事实并非如此即插即用 我已经编写了一些基本代码 但它没有做我认为应该做的事情 我知道代码审查人员不会提供这样的支持 所以我在这里寻求有关组合
  • 如何在运行时检查子类是否是类的实例? [复制]

    这个问题在这里已经有答案了 在 Android 应用程序测试套件中 我有一个这样的类 其中B是一个视图 public class A extends B etc 现在我有一个视图对象列表 其中可能包含A对象 但在这种情况下我只关心它们是否是
  • 如何一次选择多个联系人?

    我使用以下代码将电话簿联系人检索到我的应用程序 public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView
  • 在 Twitter Bootstrap 模式中动态加载谷歌地图

    我正在尝试在 Twitter 引导程序的模式窗口内动态添加地图 但它似乎不起作用
  • 在 Apache Camel 中动态加载路由的最佳方法

    我们开发了基于 Karaf 和 A pache Camel 的应用程序 虽然我们的应用程序完全基于包 OSGI 但我们还在启动时加载Camel上下文 及其 路由上下文 这意味着我们已经定义了一些静态路由 我的问题是 有没有一种方法可以在应用
  • 为什么 Json.NET 序列化会因 [Serialized] 和只读属性内的 lambda 而失败?

    根据这些发行说明 Json NET 现在支持 SerializedAttribute Json NET 现在可以检测具有 SerializedAttribute 的类型 并序列化该类型上的所有字段 公共字段和私有字段 并忽略这些属性 我有以
  • 如何使用 Selenium 设置隐藏输入的值?

    我已经看过了this但没有运气 我试过那个例子 它说undefined browserbot 我也尝试过简单的 browser navigate to http example com browser execute script hidd
  • Git 拉取时忽略文件

    我是 github 的新手 我正在开发一个应用程序 它有config php您必须输入数据库凭据的文件 在我的 github 存储库中 文件如下所示 但在网站上我有带有凭据的文件 In th
  • 如何在主项目中包含多个 Xcode 项目

    我最近问过使用多个 Xcode 项目的智慧分离项目组件 我决定在我的下一个项目中遵循这条路线 我尝试通过将另一个项目拖放到侧边栏来将其添加到主 Xcode 项目中 但是 当我 import 添加的项目中定义的任何类时 我被告知找不到这些类
  • JAVA 6x6 网格填色游戏

    大家好 我现在进入最后一部分 即文件读取 我尝试编写一个 fileReader 但似乎没有更改变量 rNum 的值 关于为什么以下陈述不会改变的任何想法 谢谢 public void readStartFile String fileNam
  • Android 4.0+ 与嵌入式设备的蓝牙连接错误:“权限被拒绝”

    我有以下设置 Android 设备使用 客户端 套接字连接到远程嵌入式设备 Android 应用程序使用以下代码片段连接到嵌入式设备 在嵌入式设备上使用MindTree BT堆栈 其中服务器串行套接字是根据设备中的一些属性准备的 这是And
  • 在 SAS 中将宽转为长,无需额外的列

    我想转置数据集 但 SAS 坚持添加新列 如果 by 列 有多个条目 所以如果我跑 data test input a b c datalines 1 aaa bbb 1 bbb bbb 2 ccc ccc 3 ccc ccc run pr
  • `fullVisitorId` => clientId,一对多映射?

    我的印象是fullVisitorId只是 clientId 的哈希值 两者之间应该存在一对一的映射 但在这里 我遇到的情况是很少有人fullVisitorId被映射到两个不同的client Id 我们正在将 GA 客户端 ID 收集到用户范
  • 超链接的路径仅为正斜杠 (/)

    我被要求对朋友的公司网站进行一些更改 它使用 PHP 插入文件作为每个页面的标题 这很有用 因为每个页面上的导航等都是相同的 以下代码指定每个页面上的公司徽标 div a href a div 如您所见 href of the a标签包含o
  • 如何在项目的 Scala 构建定义中定义包后面的目录结构?

    sbt 项目中有两个完整的构建定义文件 Build scala and Helpers scala 他们位于project folder 我想放Helpers模块到单独的子文件夹中project utils 当我做import utils
  • Pandas DataFrames 与 NaN 相等比较

    在对某些函数进行单元测试的背景下 我尝试使用 python pandas 建立 2 个 DataFrame 的相等性 ipdb gt expect 1 2 2012 01 01 00 00 00 00 00 NaN 3 2013 05 14
  • 是否可以使用 Inno Setup 接受自定义命令行参数

    我正在使用 Inno Setup 准备安装程序 但我想添加一个额外的自定义 没有可用参数 命令行参数 并希望获取参数的值 例如 setup exe do something 检查是否 do被给定 然后得到某物的价值 是否可以 我怎样才能做到
  • 有没有办法知道在什么情况下调用 Child Added ?特别是页面加载与其他事件

    这是我的场景 当通过浏览器事件页面加载后添加子项时 我想在标题中指出它 但在页面加载时 也会调用添加的子项 如何区分添加的初始子项与实际添加的新条目的子项 谢谢 蒂姆 Firebase 故意不区分 初始 数据和 新 数据 在大多数情况下 这
  • Newtonsoft.JSON序列化对象返回空JSON字符串[重复]

    这个问题在这里已经有答案了 每个人都经常被问到这个问题 我几乎尝试了所有方法 但没有一个对我有用 所以我正在 Xamarin Forms 中进行开发 并将我的数据发送到服务器 我有这门课 public class Customer publ
  • C++ 随机数每次都相同的序列

    我写这个是为了生成一个随机密码 include