Qt實(shí)現(xiàn)生成指定范圍內(nèi)隨機(jī)數(shù)與隨機(jī)字符串
1.生成隨機(jī)數(shù)
生成隨機(jī)數(shù)主要用到了函數(shù)qsrand和qrand,這兩個(gè)函數(shù)在#include <QtGlobal>中,
qsrand用來設(shè)置一個(gè)種子,該種子為qrand生成隨機(jī)數(shù)的起始值。比如說qsrand(10),設(shè)置10為種子,那么qrand生成的隨機(jī)數(shù)就在[10,32767]之間。而如果在qrand()前沒有調(diào)用過qsrand(),那么qrand()就會自動調(diào)用qsrand(1),即系統(tǒng)默認(rèn)將1作為隨機(jī)數(shù)的起始值。使用相同的種子生成的隨機(jī)數(shù)一樣。
下列代碼生成了[0,255]之間的3個(gè)隨機(jī)數(shù)。用于生成不同顏色
#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);防止連續(xù)可能會生成相同的隨機(jī)數(shù);
2.生成指定范圍隨機(jī)數(shù)
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.生成不重復(fù)的隨機(jī)數(shù)組
將產(chǎn)生的隨機(jī)數(shù)存放到數(shù)組中,在每次產(chǎn)生新的隨機(jī)數(shù)的同時(shí),在隨機(jī)數(shù)列表中檢查是否包含該數(shù)
如果包含則重新生成,直到生成新的隨機(jī)數(shù)為止。
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.產(chǎn)生隨機(jī)字符串
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; }
到此這篇關(guān)于Qt實(shí)現(xiàn)生成指定范圍內(nèi)隨機(jī)數(shù)與隨機(jī)字符串的文章就介紹到這了,更多相關(guān)Qt隨機(jī)數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)樹之后序遍歷的實(shí)現(xiàn)
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之后序遍歷的實(shí)現(xiàn)的相關(guān)資料,這里提供一個(gè)簡單實(shí)例來實(shí)現(xiàn)后續(xù)遍歷,對于數(shù)據(jù)結(jié)構(gòu)樹的學(xué)習(xí)很有幫助,需要的朋友可以參考下2017-07-07C++用winapi?socket實(shí)現(xiàn)局域網(wǎng)語音通話功能
這篇文章主要介紹了socket實(shí)現(xiàn)局域網(wǎng)語音通話?c++?winapi,功能介紹支持錄音設(shè)備查找以及播放設(shè)備查找,支持局域網(wǎng)語音通話,通話包含語音來電提醒和掛斷電話的提示信息,還能實(shí)時(shí)的獲取在線用戶的數(shù)量以及對應(yīng)的id,需要的的朋友一起看看2022-06-06C語言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度入門
這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)與算法之時(shí)間空間復(fù)雜度的入門教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02C++實(shí)現(xiàn)std::set的示例項(xiàng)目
std::set是C++標(biāo)準(zhǔn)庫中的關(guān)聯(lián)容器,提供有序唯一元素集合,本文就來介紹一下std::set的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02JS調(diào)用C++函數(shù)拋出異常及捕捉異常詳解
這篇文章主要介紹了js調(diào)用C++函數(shù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2021-08-08C++分析構(gòu)造函數(shù)與析造函數(shù)的特點(diǎn)梳理
本文對類的構(gòu)造函數(shù)和析構(gòu)函數(shù)進(jìn)行總結(jié),主要包括了構(gòu)造函數(shù)的初始化、重載、使用參數(shù)和默認(rèn)參數(shù),拷貝構(gòu)造函數(shù)和析構(gòu)函數(shù),希望能幫助讀者在程序開發(fā)中更好的理解類,屬于C/C++基礎(chǔ)2022-05-05