Qt实现生成指定范围内随机数与随机字符串

 更新时间:2023年07月21日 08:22:01   作者:恋恋西风  
这篇文章主要为大家详细介绍了如何利用Qt实现生成指定范围内随机数与随机字符串,文中的示例代码简洁易懂,感兴趣的小伙伴可以自己动手尝试一下

1.生成随机数

生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,

qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间。而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使用相同的种子生成的随机数一样。

下列代码生成了[0,255]之间的3个随机数。用于生成不同颜色

#include <QTime> 
void generateRandomNumber()
{
    qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));
    for(int i=0; i<3; i++)
    {
        int test =qrand()%256;
        QTest::qSleep(1);
        qDebug()<<test;
    }
}

注意:

这里我用的 是 msecsTo,并且加了 QTest::qSleep(1);防止连续可能会生成相同的随机数;

2.生成指定范围随机数

int generateRandomNumber(int min,int max)
{
    qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));
    int num = qrand()%(max-min)+min;
    qDebug()<<num;
    return num;
}

3.生成不重复的随机数组

将产生的随机数存放到数组中,在每次产生新的随机数的同时,在随机数列表中检查是否包含该数

如果包含则重新生成,直到生成新的随机数为止。

int getRandom(int min,int max)
{
    QList<int> list;
    int i,j;
    bool res = true;
    qsrand(QTime(0, 0, 0).msecsTo(QTime::currentTime()));
    for (int i=0; i<10; i++) {
        int num = qrand()%(max-min)+min;
        list.append(num);
        while(res)
        {
            for(j=0;j<i;j++)
            {
                if(list[i]==list[j])
                    break;
            }
            if(j<i)
            {
                list[i] = qrand()%(max-min)+min;
            }
            if(j==i)
                res=!res;
        }
    }
}

4.产生随机字符串

QString getRandomString(int length)
{
    qsrand(QDateTime::currentMSecsSinceEpoch());
    const char ch[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int size = sizeof(ch);
    char* str = new char[length + 1];
    int num = 0;
    for (int i = 0; i < length; ++i)
    {
        num = rand() % (size - 1);
        str[i] = ch[num];
    }
    QString res(str);
    return res;
}

到此这篇关于Qt实现生成指定范围内随机数与随机字符串的文章就介绍到这了,更多相关Qt随机数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中getch()函数详解及简单实例

    C语言中getch()函数详解及简单实例

    这篇文章主要介绍了C语言中getch()函数详解及简单实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • C语言实现静态版通讯录的代码分享

    C语言实现静态版通讯录的代码分享

    这篇文章主要为大家详细介绍了如何利用C语言实现一个简单的静态版通讯录,主要运用了结构体,一维数组,函数,分支与循环语句等等知识,需要的可以参考一下
    2023-01-01
  • C++ set到底是什么

    C++ set到底是什么

    这篇文章主要讨论C++ 中得set到底是什么?在C++当中,这几个东西的名字叫做vector、set和map,它们有一个共同的名字叫做STL(标准模板库)容器。下面来看看文章是怎么介绍得吧,需要的朋友可以参考一下哦
    2021-11-11
  • C++中日期类的常见题目合集分享

    C++中日期类的常见题目合集分享

    这篇文章主要为大家详细介绍了一些C++中日期类的常见题目,文中的示例代码讲解详细,对我们掌握C++有一定的帮助,感兴趣的小伙伴可以了解一下
    2023-06-06
  • C语言使用四种方法初始化结构体

    C语言使用四种方法初始化结构体

    这篇文章说明了什么是结构体,介绍了结构体的概念和使用优点,在C语言中如何使用和初始化结构体方法,通过详细的代码展开进行说明,希望该篇文章对你有所帮助
    2021-06-06
  • C++进程的创建和进程ID标识详细介绍

    C++进程的创建和进程ID标识详细介绍

    传统的C++(C++98)中并没有引入线程这个概念。linux和unix操作系统的设计采用的是多进程,进程间的通信十分方便,同时进程之间互相有着独立的空间,不会污染其他进程的数据,天然的隔离性给程序的稳定性带来了很大的保障
    2022-08-08
  • 二叉树入门和刷题详解

    二叉树入门和刷题详解

    这篇文章主要介绍了二叉树入门和刷题详解的相关资料,需要的朋友可以参考下
    2023-07-07
  • C++ deque容器的具体使用

    C++ deque容器的具体使用

    deque又称双端队列容器。deque容器中存储元素并不能保证所有元素都存储到连续的内存空间中,本文详细的介绍了C++ deque容器的使用,感兴趣的可以了解一下
    2021-05-05
  • c++实现版本层次遍历功能

    c++实现版本层次遍历功能

    这篇文章主要介绍了c++实现版本层次遍历功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 详解C语言读取文件求某一列的平均值

    详解C语言读取文件求某一列的平均值

    本文粗浅比较了C语言中常用的几种读取文件的函数的效率,并给出了几段求取某列平均值的代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多度进步
    2022-02-02

最新评论