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++ Boost Algorithm算法超详细精讲

    C++ Boost Algorithm算法超详细精讲

    Boost.Algorithm 提供了补充标准库算法的算法。与 Boost.Range 不同,Boost.Algorithm 没有引入新概念。 Boost.Algorithm 定义的算法类似于标准库中的算法
    2022-10-10
  • 深入理解C++11:探索lambda函数的奥秘

    深入理解C++11:探索lambda函数的奥秘

    聚焦于C++11,让我们一起探索lambda函数的奥秘,本指南将带您深入了解这个强大的编程工具,让您在编程世界中如虎添翼,无论您是初学者还是有经验的开发者,本指南都将为您带来全新的视角和实用的技巧,需要的朋友可以参考下
    2024-01-01
  • epoll封装reactor原理剖析示例详解

    epoll封装reactor原理剖析示例详解

    这篇文章主要为大家介绍了epoll封装reactor原理剖析示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • C语言之函数递归的实现

    C语言之函数递归的实现

    本文主要介绍了C语言之函数递归的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • C语言模拟实现学生学籍管理系统

    C语言模拟实现学生学籍管理系统

    这篇文章主要为大家详细介绍了C语言模拟实现学生学籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • C/C++中常用加密与解密算法的实现

    C/C++中常用加密与解密算法的实现

    这篇文章主要为大家详细介绍了一些在C++中常用的加密与解密算法,这其中包括Xor异或、BASE64、AES、MD5、SHA256、RSA等,感兴趣的小伙伴可以学习一下
    2023-11-11
  • 华为机试题之统计单词个数实例代码

    华为机试题之统计单词个数实例代码

    这篇文章主要介绍了华为机试题之统计单词个数实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • C语言实现企业员工管理系统开发

    C语言实现企业员工管理系统开发

    这篇文章主要为大家详细介绍了C语言实现企业员工管理系统开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 浅析C++宏定义里#和##的使用

    浅析C++宏定义里#和##的使用

    工作中如果是c开发的话,经常会用到宏定义,而宏定义中的#和##也会时不时遇到,本文主要就来和大家分享一下这两个符号的作用,需要的可以参考一下
    2023-05-05
  • C++容器map和pair对组实例详解

    C++容器map和pair对组实例详解

    pair 是一种模板类,允许将两个不同类型的值组合在一起,它由两个数据成员first和second组成,分别用来保存这两个值,这篇文章主要介绍了C++容器——map和pair对组,需要的朋友可以参考下
    2024-05-05

最新评论